今天学习了PHP数组,整理下相关知识点。
PHP数组是什么?
php数组是一个能在单个变量中存储多个值的特殊变量。
如:你有一个项目清单(人名清单),将其存储到单个变量中,如下:
$name1 = '张三'; $name2 = '李四'; $name3 = '王五'; $name4 = '赵六';
....
如果这个清单里面有上百号人名,你要从中找到指定的某一个这样会有点麻烦了。
解决这个问题的办法就是创建一个数组。
数组可以在单个变量中存储多个值,并且您可以根据键访问其中的值。
在 PHP 中,array() 函数用于创建数组:
array();
在 PHP 中,有三种类型的数组:
① 数值数组 - 带有数字 ID 键的数组
② 关联数组 - 带有指定的键的数组,每个键关联一个
③ 多维数组 - 包含一个或多个数组的数组
例1(数值数组):
$name = array( '张三', '李四', '王五', '赵六', ); print_r($name[0])//打印结果:张三
例2(关联数组):
$name = array( 'name1'=>"张三", 'name2'=>"李四", 'name3'=>"王五", 'name4'=>"赵六", ); print_r($name['name1'])//打印结果:张三
例3(多维数组):
$name = array( 'name1'=>array( '张三', '李四', '王五', '赵六', ), 'name2'=>array( '王朝', '马汉', '张龙', '赵虎', ), ); print_r($name['name1'])//打印结果:Array ( [0] => 张三 [1] => 李四 [2] => 王五 [3] => 赵六 ) print_r($name['name1'][0])//打印结果:张三
例4:
$name = array(); $name[0] = '张三'; $name[1] = '李四'; $name[3] = '王五'; $name[] = '赵六'; print_r($name)//打印结果:Array ( [0] => 张三 [1] => 李四 [3] => 王五 [4] => 赵六 )
例4中第四项没有给索引值,那么该项中[] 里面的索引值就是该数组中最大的数字索引(最大的数字索引是3)上+1,也就是4。
再来认识一下 array_keys() 函数和array_values() 函数(基本用法可以参照例5)
array_keys() 函数
array_keys() 函数返回包含数组中所有键名的一个新数组。
如果提供了第二个参数,则只返回键值为该值的键名。
如果 strict 参数指定为 true,则 PHP 会使用全等比较 (===) 来严格检查键值的数据类型。
array_values() 函数
array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
提示:被返回的数组将使用数值键,从 0 开始并以 1 递增。
例5:
$name = array( 'name1'=>'张三', 'name2'=>'李四', 'name3'=>'王五', 'name4'=>'赵六', ); $keys = array_keys( $name ); $values = array_values( $name ); print_r(implode(',',$keys));//打印结果:name1,name2,name3,name4 print_r(implode(',',$values))//打印结果:张三,李四,王五,赵六
接着来看看foreach 循环
foreach 循环用于遍历数组。
语法:
foreach ($array as $value) { 要执行代码; }
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。(如下例6)
例6:
$name = array( 'name1' => array( '张三', '李四', ), 'name2'=> array( '王五', '赵六', ) ); foreach( $name as $k => $v ){ echo $k;//打印结果:name1,name2, foreach( $v as $k2 => $v2 ){ echo '---->' . $v2;//打印结果:name1---->张三---->李四,name2---->王五---->赵六, } echo ','; }
目前刚开始接触到PHP数组的知识,就整理了以上几个函数的作用。如需完整的数组函数参考手册,请访问W3C的 PHP 数组参考手册。
函数 | 描述 |
---|---|
array() | 创建数组。 |
array_change_key_case() | 把数组中所有键更改为小写或大写。 |
array_chunk() | 把一个数组分割为新的数组块。 |
array_column() | 返回输入数组中某个单一列的值。 |
array_combine() | 通过合并两个数组来创建一个新数组。 |
array_count_values() | 用于统计数组中所有值出现的次数。 |
array_diff() | 比较数组,返回差集(只比较键值)。 |
array_diff_assoc() | 比较数组,返回差集(比较键名和键值)。 |
array_diff_key() | 比较数组,返回差集(只比较键名)。 |
array_diff_uassoc() | 比较数组,返回差集(比较键名和键值,使用用户自定义的键名比较函数)。 |
array_diff_ukey() | 比较数组,返回差集(只比较键名,使用用户自定义的键名比较函数)。 |
array_fill() | 用给定的键值填充数组。 |
array_fill_keys() | 用指定键名的给定键值填充数组。 |
array_filter() | 用回调函数过滤数组中的元素。 |
array_flip() | 交换数组中的键和值。 |
array_intersect() | 比较数组,返回交集(只比较键值)。 |
array_intersect_assoc() | 比较数组,返回交集(比较键名和键值)。 |
array_intersect_key() | 比较数组,返回交集(只比较键名)。 |
array_intersect_uassoc() | 比较数组,返回交集(比较键名和键值,使用用户自定义的键名比较函数)。 |
array_intersect_ukey() | 比较数组,返回交集(只比较键名,使用用户自定义的键名比较函数)。 |
array_key_exists() | 检查指定的键名是否存在于数组中。 |
array_keys() | 返回数组中所有的键名。 |
array_map() | 把数组中的每个值发送到用户自定义函数,返回新的值。 |
array_merge() | 把一个或多个数组合并为一个数组。 |
array_merge_recursive() | 递归地合并一个或多个数组。 |
array_multisort() | 对多个数组或多维数组进行排序。 |
array_pad() | 用值将数组填补到指定长度。 |
array_pop() | 删除数组的最后一个元素(出栈)。 |
array_product() | 计算数组中所有值的乘积。 |
array_push() | 将一个或多个元素插入数组的末尾(入栈)。 |
array_rand() | 返回数组中一个或多个随机的键。 |
array_reduce() | 通过使用用户自定义函数,以字符串返回数组。 |
array_replace() | 使用后面数组的值替换第一个数组的值。 |
array_replace_recursive() | 递归地使用后面数组的值替换第一个数组的值。 |
array_reverse() | 以相反的顺序返回数组。 |
array_search() | 搜索数组中给定的值并返回键名。 |
array_shift() | 删除数组中首个元素,并返回被删除元素的值。 |
array_slice() | 返回数组中被选定的部分。 |
array_splice() | 删除并替换数组中指定的元素。 |
array_sum() | 返回数组中值的和。 |
array_udiff() | 比较数组,返回差集(只比较值,使用一个用户自定义的键名比较函数)。 |
array_udiff_assoc() | 比较数组,返回差集(比较键和值,使用内建函数比较键名,使用用户自定义函数比较键值)。 |
array_udiff_uassoc() | 比较数组,返回差集(比较键和值,使用两个用户自定义的键名比较函数)。 |
array_uintersect() | 比较数组,返回交集(只比较值,使用一个用户自定义的键名比较函数)。 |
array_uintersect_assoc() | 比较数组,返回交集(比较键和值,使用内建函数比较键名,使用用户自定义函数比较键值)。 |
array_uintersect_uassoc() | 比较数组,返回交集(比较键和值,使用两个用户自定义的键名比较函数)。 |
array_unique() | 删除数组中的重复值。 |
array_unshift() | 在数组开头插入一个或多个元素。 |
array_values() | 返回数组中所有的值。 |
array_walk() | 对数组中的每个成员应用用户函数。 |
array_walk_recursive() | 对数组中的每个成员递归地应用用户函数。 |
arsort() | 对关联数组按照键值进行降序排序。 |
asort() | 对关联数组按照键值进行升序排序。 |
compact() | 创建包含变量名和它们的值的数组。 |
count() | 返回数组中元素的数目。 |
current() | 返回数组中的当前元素。 |
each() | 返回数组中当前的键/值对。 |
end() | 将数组的内部指针指向最后一个元素。 |
extract() | 从数组中将变量导入到当前的符号表。 |
in_array() | 检查数组中是否存在指定的值。 |
key() | 从关联数组中取得键名。 |
krsort() | 对数组按照键名逆向排序。 |
ksort() | 对数组按照键名排序。 |
list() | 把数组中的值赋给一些变量。 |
natcasesort() | 用“自然排序”算法对数组进行不区分大小写字母的排序。 |
natsort() | 用“自然排序”算法对数组排序。 |
next() | 将数组中的内部指针向前移动一位。 |
pos() | current() 的别名。 |
prev() | 将数组的内部指针倒回一位。 |
range() | 创建包含指定范围单元的数组。 |
reset() | 将数组的内部指针指向第一个元素。 |
rsort() | 对数组逆向排序。 |
shuffle() | 将数组打乱。 |
sizeof() | count() 的别名。 |
sort() | 对数组排序。 |
uasort() | 使用用户自定义的比较函数对数组中的键值进行排序。 |
uksort() | 使用用户自定义的比较函数对数组中的键名进行排序。 |
usort() | 使用用户自定义的比较函数对数组进行排序。 |
本博文的部分内容摘自菜鸟教程和W3C。