PHP Array 是什么?
数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。PHP 中的数组较为复杂,但比其他许多高级语言中的数组更为灵活。
数组 array 是一组有序的变量,其中每个值被称为一个元素。每个元素由一个特殊的标识符来区分,这个标识符称为键(也称为下标)。
数组中的每个实体都包含两项,分别是键(key)和值(value)。可以通过键值来获取相应的数组元素,这些键可以是数值键,也可以是关联键。如果说变量是存储单个值的容器,那么数组就是存储多个值的容器。
PHP 数组比其他高级语言中的数组更加灵活,不但支持以数字为键名的索引数组,而且支持以字符串或字符串、数字混合为键名的关联数组。而在其他高级语言中,如 Java 或者 C++ 等语言的数组,只支持数字索引数组。
PHP 数组的结构如下图所示:
在 PHP 中,有三种数组类型:索引数组:带有数字索引的数组
关联数组:带有指定键的数组
多维数组:包含一个或多个数组的数组
PHP Array 使用
PHP数组的定义[1, 5, 1.1, 'abc' true, false] //可以存储任何数据,此时为'默认下标',
[2=>1, 5=>5, 3=>1.1, 7=>'abc' 0=>true]//下标可以任意设定(无需顺序,无需连续)
[2=>1, 5, 1=>1.1, 'abc' 0=>true]//可以加下标,也可以不加(默认下标),下标分别是:2,3,1,4,0
//默认下标规则:前面已经用过的最大数字下标+1
[2=>1, 'dd'=>5, 1=>1.1, 'abc' 0=>true]//混合下标,同样遵循默认下标规则
[-2=>1, 'dd'=>5, 1.1, 'abc' true]; //负数下标不算在整数下标中,而只当作字符下标
//则最好3项的下标是:0, 1, 2
[2.7=>1, 'dd'=>5, 1=>1.1, 'abc' 0=>true]//浮点数下标为自动转换为整数,且直接抹掉小数
['2.7' =>1, 'dd'=>5, '11'=>1.1, 'abc' true]//纯数字字符串下标,当作数字看待,
//则此时下标为:2, 'dd', 11, 12, 13
[2=>1, 'dd'=>5, true=>1.1, 'abc' false=>true]//布尔值当下标,则true为1,false为0;
[2=>1, 'dd'=>5, 2=>1.1, 'abc' true]//如果下标跟前面的重复,则单纯覆盖前面同名下标的值
关联数组$array = [
'name' => 'zhaosi',
'age' => 20,
'sex' => '女'
];
多维数组$array = [
[
'name' => 'xiaoming',
'age' => 17,
'sex' => '男'
],
[
'name' => 'wanghua',
'age' => 16,
'sex' => '女'
],
[
'name' => 'zhaosi',
'age' => 20,
'sex' => '女'
],
[
'name' => 'zhangsan',
'age' => 22,
'sex' => '男'
],
[
'name' => 'wangli',
'age' => 12,
'sex' => '女'
],
[
'name' => 'zhuhua',
'age' => 14,
'sex' => '男'
]
];
数组历遍$array = [
[
'name' => 'xiaoming',
'age' => 17,
'sex' => '男'
],
[
'name' => 'wanghua',
'age' => 16,
'sex' => '女'
],
[
'name' => 'zhaosi',
'age' => 20,
'sex' => '女'
],
[
'name' => 'zhangsan',
'age' => 22,
'sex' => '男'
],
[
'name' => 'wangli',
'age' => 12,
'sex' => '女'
],
[
'name' => 'zhuhua',
'age' => 14,
'sex' => '男'
]
];
foreach ($array as $key => $value) {
echo $value['name'];
echo $value['age'];
echo $value['sex'];
}
输出结果xiaoming
17
男
wanghua
16
女
zhaosi
20
女
zhangsan
22
男
wangli
12
女
zhuhua
14
男
常用PHP数组函数
1、count() 函数的作用是计算数组中的元素数目或对象中属性个数int count(mixed var[,int mode])
第一个参数是必须的,传人个计算的数组或对象。第二个参数是可选,规定函数的模式是否递归地计算多维数组中数组的元素个数,可能的值是0 或1,0为默认值,不检测多维 数组,为 1则检测多维数组
示例:$a = array(
"a",
"b",
"c",
"d"
);
echo count($a); //输出个数4
$b = array(
"a" => array(
1,
2,
3
) ,
"b" => array(
4,
5,
6
)
);
echo count($b, 1); //输出 8
echo count($b); //输出 2y([b]=>2 [d]=>4)
2、array_count_values() 函数用于统计数组中所有值出现的次数,该函数只有一个参数array array_count_values(array input)
参数规定输入一个数组,返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数
示例:$array=array(1,"a",1,"b","a");
$newarray=array_count_values($array);
print_r($newarray);//输出array([1]=>2 [a]=>2 [b]=>1)
3、array_unique()函数用于删除数组中重复的值,并返回没有重复值的新数组array array_unique(array array)
参数需要接受一个数组,当数组中几个元素的值相等时,只保留第一个元素,其他元素被删除,并且返回的新数组中键名不变,array_unique()先将值作为字符串排序,然后对每个值只保留第一遇到的键名,接着忽略所有后面的键名
示例:$a=array("a"=>1,"b"=>2,"c"=>1);
print_r(array_unique($a));//输出 array([a]=>1 [b]=>2)
4、array_filter() 函数用回调函数过滤数组中元素,返回按用户自定义函数过滤后的数组array array_filter(array input [,callback callback])
参数:第一参数是必选项,要求输入一个被过滤的数组,第二参数可选,将用户自定义的函数名以字符串形式传入,如果自定义过滤函数返回true,则被操作的数组的当前值就会被包含在返回的结果数组中,并将结果组成一个新数组,如果原数组是一个关联数组,则键名保持不变。
示例:function myFun($var) {
if ($var % 2 == 0) {
return true;
}
}
$array = array(
"a" => 1,
"b" => 2,
"c" => 3,
"d" => 4
);
print_r($array, "myFun"); //输出 array([b]=>2 [d]=>4)
5、array_walk()函数对数组中的每个元素应用回调函数处理,如果成功返回true,否则返回falsebool array_walk( array &array,callback funcname [,mixed userdata])
第一个参数是必须,要求输入一个被指定的回调函数处理的数组,第二个参数传人用户定义的回调函数,用于操作传人第一参数的数组
示例:function myFunc1($value, $key) {
echo "key=$key value=$value";
}
$a = ["a" => "lin1", "b" => "lin2", "c" => "lin3"];
array_walk($a, "myFunc1");
function myFunc2($value, $key, $str) {
echo "$key $value";
}
array_walk($a, "myFunc2");
function myFunc3($value, $key) {
$value = "lin.su";
}
array_walk($a, "myFunc3");
print_r($a); //$a 是一个引用数组
6、array_map()函数可以处理多个数组,将回调函数作用到给定数组的元素上,返回用户自定义函数作用后数组。array array_map(callback callback,array arr1[,arry ....])
示例:function myFunc($v1, $v2) {
if ($v1 == $v2) {
return "same";
}
return "different";
}
$a = [1, 2, 3];
$b = [1, 4, 3];
print_r(array_map("myFunc", $a, $b)); //输出 array([0]=>same [1]=>difference [2]=>same)
print_r(array_map(null, $a, $b));
输出:array(
[0]=>array([0]=>1 [1]=>2 [2]=>3)
[1]=>array([0]=>1 [1]=>2 [2]=>3)
)
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()使用用户自定义的比较函数对数组进行排序。