php数组函数
时间:2020-03-27
本文章向大家介绍php数组函数,主要包括php数组函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
数组
php中的数组是一个有序映射,映射是一种把values关联到keys的类型,数组可以接受任意数量用逗号分隔符的键值对。
数组的介绍
/*
* php中数组可以分为:
* 索引数组:下标是数字
* 关联数组:下标是字符串
* 注:php中数组其实不区分索引还是关联数组,都是根据键名找到对应的值
*
* php可以同时包含integer和string类型的键名
* key:可以是一个整数integer或者字符串string
* value:可以是任意类型的值
*
* php中的key只能是integer或这string类型,如果使用其他类型会自动转换:
* 1. 包含有合法整型值的字符串会被自动转换成整型(如'8'会被转换为8,但是'08'不会被转换)
* 2. 浮点数会被转换成整型,小数部分会被舍去
* 3. 布尔值会被转换成整型(true转成1,false转成0)
* 4. NULL会被转换成空字符串,即''
* 5. 数组和对象不能被用为键名
*
* 如果数组定义中多个单元都用了同一个键名,则只会使用最后一个,之前的值都会被覆盖
* 如果没有指定键名,且键名不都为负数,新添加的元素的键名是已有键名的最大值+1
* 如果键名都为负数,那么新添加的元素键名从0开始
*
*/
数组的创建
$arr1 = array(); //创建一个空数组
$arr2 = array(1, 2, 3); //创建一个索引数组
$arr3 = array( //创建一个关联数组
'a' => 'a_value',
'b' => 'b_value',
'c' => 'c_value'
);
$arr4 = []; //[]用法和array()一致,同样可以创建空数组、索引数组、关联数组
$arr4[] = 'a'; //利用[]对数组进行扩展,为数组新添元素
键名类型的自动转换
$arr = array(
1 => 'a', //1 键名为integer类型,不会自动转换
'b' => 'b', //'b' 键名为string类型,不会自动转换
'8' => 'c', //8 包含有合法整型值的字符串会自动转换成整型
3.5 => 'd', //3 键名为浮点数类型,会舍去小数,转换成integer类型
true => 'e', //1 键名为布尔类型,true转成1,false转成0
null => 'f', //'' 键名为NULL类型,会转成''
'g' //9 没有指定键名,默认为已有最大健名的值+1
);
$arr[] = 'h'; //10 新添加一个健值对,没有指定键名,默认为已有最大健名的值+1
print_r($arr); //printf_r()是数组输出专用函数
通过range()和compact()快速创建
//range()快速创建下标连续的索引数组
//
/*
* range()函数
* array range(mixed $start, mixed $limit[, number $step=1])
* 描述:建立一个包含指定范围单元的,且下标连续的索引数组
* start:序列的第一个值
* limit:序列结束于limit的值
* step:如果给出了step的值,它将被作为单元之间的步进值,如果未指定,默认为1
*
* 补充:
* string chr(int $value):将数字作为ASCII转成成字符
* int ord(string $value):输出字符的ASCII
*/
$arr = range(1, 5);
print_r($arr); //Array([0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5)
$arr = range('a', 'b', 'c');
print_r($arr); //Array([0] => a [1] => b [2] => c)
echo chr(90), "\n"; //Z
echo ord('z'), "\n"; //122
//compact()快速创建关联数组
/*
* compact()函数
* array compact(mixed $varname[, mixed $...])
* 描述:建立一个数组,包括变量名和它们的值
*
* 补充:
* list($var1, $var2...):将数组中的值赋给一些变量
*/
$username = 'zhao';
$age = '22';
$email = 'wangzhao_hb@126.com';
$arr = compact('username', 'age', 'email'); //通过将已有变量名放在函数中快速生成关联数组
//Array([username] => zhao [age] => 22 [email] => wangzhao_hb@126.com)
print_r($arr);
list($a, $b, $c) = array(1, 2, 3);
echo "a的值为{$a}, b的值为{$b}, c的值为{$c}", "\n"; //a的值为1, b的值为2, c的值为3
通过const和define()定义常量数组
const ARR1 = [1, 2, 3]; //const定义常量数组
print_r(ARR1); //Array([0] => 1 [1] => 2 [2] => 3)
define('ARR2', [1, 2, 3]); //define()定义常量数组
print_r(ARR2); //Array([0] => 1 [1] => 2 [2] => 3)
//运用场景:自定义文件上传错误数组信息
define('CUSTOM_UPLOAD_ERRORS', [
'ext_error' => '文件扩展名不符合规范',
'maxsize' => '上传文件大小不符合规范'
]);
//遇到文件上传时扩展名不符合规范的时候,可调用报错
echo CUSTOM_UPLOAD_ERRORS['ext_error'], "\n"; //文件扩展名不符合规范
数组的使用
/*
* => 通过键名找到对应的键值
* 增、删、改、查
*/
//查找:通过键名找到对应的键值
$arr1 = ['a', 'b', 'c', 'd'];
$arr2 = [
'username' => '王昭',
'sex' => '男'
];
echo '下标为2的值:', $arr1[2], "\n"; //下标为2的值:c
echo '用户名为:',$arr2['username'], "\n"; //用户名为:王昭
$arr3 = [ //二位数组的查找
['id'=>'1001', 'name'=>'张三'],
['id'=>'1002', 'name'=>'李四']
];
echo '下标为0的姓名:', $arr3[0]['name'], "\n"; //下标为0的姓名:张三
//添加
$arr = ['a', 'b', 'c'];
$arr[] = 'd'; //添加元素,不指定键名,键名为数字
$arr['username'] = '王昭'; //添加元素,指定键名,键名为字符串
print_r($arr); //Array([0] => a [1] => b [2] => c [3] => d [username] => 王昭)
//修改
$arr = ['a', 'b', 'c', 'username'=>'王昭'];
$arr['username'] = '张三';
echo $arr['username'], "\n"; //张三
//删除
unset($arr['username']); //删除键名为'username'的键值对
print_r($arr); //Array([0] => a [1] => b [2] => c)
unset($arr[1]);
print_r($arr); //Array([0] => a [2] => c)
unset($arr); //释放数组
//print_r($arr); //输出错误 Notice: Undefined variable
其他类型转换成数组
/*
* 如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为0,该元素即为此标量的值;
* 对象可以转换为数组,但是注意尽量避免这样转换,因为会导致一些意想不到的效果。
* 注意:null转换成数组是空数组[]
*
* 临时转换
* (array)$var
*
* 永久转换
* settype($var, 'array')
*/
$str = 'abc';
$arr = (array)$str;
print_r($arr); //Array([0] => abc)
settype($str, 'array');
print_r($str); //Array([0] => abc)
数组运算符
/*
* 常用的数组运算符:
* +:合并数组,如果键名相同,只展示左边数组的键值对
* ==:比较数组的键名和对应的键值是否相同,如果相同返回true,否则返回false
* ===:既要比较键名和对应的键值及键值类型是否相同,而且顺序也要相同
* !=:比较数组的键名和对应的键值是否不相同
* !==:比较数组的键名和对应的键值和键值类型是否不相同,或者顺序不相同
* <>:和!=效果一样
*
*
*/
$arr1 = [1, 2, 3];
$arr2 = ['a', 'b', 'c'];
$arr3 = ['username'=>'张三', 'age'=>12];
$arr4 = [10=>10, 11=>11];
$arrSum1 = $arr1 + $arr2; //如果键名相同,只会展示左边数组的键值对
$arrSum2 = $arr1 + $arr3; //+与数组是索引数组或者是关联数组无关
$arrSum3 = $arr1 + $arr3 + $arr4; //如果后面的数组的键名和前面的数组的键名重复,不会覆盖,会展示前面数组对应的键值
print_r($arrSum1); //Array([0] => 1 [1] => 2 [2] => 3)
print_r($arrSum2); //Array([0] => 1 [1] => 2 [2] => 3 [username] => 张三 [age] => 12)
print_r($arrSum3); //Array([0] => 1 [1] => 2 [2] => 3 [username] => 张三 [age] => 12 [10] => 10 [11] => 11)
$arr5 = ['1'=>1, 'b'=>2, 'c'=>3];
$arr6 = ['b'=>2, '1'=>1, 'c'=>3];
$arr7 = [1=>1, 'b'=>2, 'c'=>3];
var_dump($arr5 == $arr6); //bool(true)
var_dump($arr5 === $arr6); //bool(false)
var_dump($arr5 === $arr7); //bool(true)
var_dump($arr5 != $arr6); //bool(false)
var_dump($arr5 !== $arr6); //bool(true)
原文地址:https://www.cnblogs.com/jackw1/p/12580962.html
- 梯度是如何计算的
- Java 机器学习库Smile实战(二)AdaBoost
- 如何用excel urldecode解码把url编码转为汉字?
- Scikit-learn实战之 SVM回归分析、密度估计、异常点检测
- TensorFlow模拟简单线性模型小栗子
- web跨域解决方案
- Bootstrap幻灯轮播如何支持触屏左右滑动手势?
- JavaScript 调试小技巧
- 图片上传预览js
- Isolation Forest算法实现详解
- css继承样式怎么控制?用选择器
- wordpress站内搜索结果页URL伪静态如何操作
- 如何实现大图居中超过的部分两边自动隐藏
- Ubuntu16.04安装后开发环境配置和常用软件安装
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Laravel 路由使用入门
- Go 数据存储篇(六):数据表之间的关联关系和关联查询
- 搭建nextcloud私有云存储网盘的教程详解
- Laravel 路由使用进阶
- 使用dig/nslookup命令查看dns解析的方法步骤
- Go 数据存储篇(七):GORM 使用入门
- 在 Linux 上使用 Multitail命令的教程
- 深入理解linux执行文件提示No such file or directory的背后原因
- Laravel 控制器:从 MVC 模式聊起
- 基于yolo5工地安全帽和禁入危险区域识别系统,附数据集
- Go 常见并发模式实现(一):调度后台处理任务的作业程序
- 路由使用进阶(二)
- linux No space left on device由索引节点(inode)爆满引发500问题
- linux中批量添加文件前缀的操作方法
- Go 常见并发模式实现(二):通过缓冲通道实现共享资源池