PHP常用的数组函数
一、array_diff 计算数组的差集语法
array_diff(array $array,array...$arrays):array
参数
array: 要被比对的数组
arrays: 更多比较的数组
返回值
该函数的返回值是一个数组,该数组中包含了在array中但是不在其他数组中的值。值得注意的是,返回的值它对应的键名不会改变,即:保留原数组的键。
案例
$array1=["name"=>'张三',"李四","王五","赵六"];
$array2=["nick"=>'张五',"赵六","李四","柱子"];
$result=array_diff($array1,$array2);
echo print_r($result,true);// Array ( [name] => 张三 [1] => 王五 )
二、array_diff_assoc带索引检查计算数组的差集语法
array_diff_assoc(array $array,array...$arrays):array
参数
array: 要被比对的数组
arrays: 更多比较的数组
返回值
返回一个数组,其中包含array中所有其他数组中不存在的所有值。注意和array_diff()不同的是键名也用于比较。
案例
$array1=["name"=>'张三',"李四","王五","赵六"];
$array2=["nick"=>'张三',"李四","狗子","柱子"];
$result1=array_diff($array1,$array2);
echo print_r($result1,true)."
";// Array ( [1] => 王五 [2] => 赵六 )
$result2=array_diff_assoc($array1,$array2);
echo print_r($result2,true);// Array ( [name] => 张三 [1] => 王五 [2] => 赵六 )
通过上述array_diff()和array_diff_assoc()两个函数的结果可以看出,array1的键值对"name" => "张三"和array2的键值对"nick" => "张三"它们的值都是相等的,但是键名不同,所以在array_diff_assoc()函数中还是会输出该值。相当于使用了严格检查模式。
三、array_intersect_assoc 带索引检查计算数组的交集语法
array_intersect_assoc(array $array, array …$arrays) : array
参数
array: 要检查的数组,该数组作为主值
arrays: 要被对比的数组列表
返回值
返回一个数组,该数组包含了在array中也同时出现在所有其它参数数组中的值。注意和array_intersect()不用的是键名也用于比较。
案例
$array1=["name"=>'张三',"李四","王五","赵六"];
$array2=["nick"=>'张三',"李四","赵六","柱子"];
$result=array_intersect_assoc($array1,$array2);
echo print_r($result,true);// Array ( [0] => 李四 )
以上代码只会输出[0] => 李四,因为只有array2中李四的键值对与array1中的完全相等。
五、array_merge()合并一个或多个数组语法
array_merge(array …$arrays) : array
参数
arrays: 要合并的一个或多个数组
返回值
返回一个合并后的结果数组。
注意
如果输入的数组中有相同的字符串键名,那么后者的值将覆盖前者,但是如果数组包含数字键名,后面的值将不会覆盖原来的值,而是会附加在数组后面。
案例
$array1=['color'=>'blue',3,5];
$array2=['a',5,'color'=>'red',10];
print_r(array_merge($array1,$array2));
// 结果:
// // Array ( [color] => red [0] => 3 [1] => 5 [2] => a [3] => 5 [4] => 10 )
六、array_combine()合并两个数组,其中一个数组的值作为新数组的键,另外一个数组的键作为新数组的值语法
array_combine(array $keys, array $values) : array
参数
keys: 要当做新数组的键。
values: 要当做新数组的值。
返回值
返回一个新数组,如果两个数组的数量不一样将返回false。
案例
以下代码会报错:array_combine(): Both parameters should have an equal number of elements
$array1=['color'=>'blue',3,5];
$array2=['a',5,'color'=>'red',10];
print_r(array_combine($array1,$array2));
结果图:
正确的代码应该是下面的:
$array1=['color'=>'blue',3,5];
$array2=['a',5,'color'=>'red'];
print_r(array_combine($array1,$array2));// Array ( [blue] => a [3] => 5 [5] => red )
这里有一点值得注意的是:两个数组的单元数量必须是一致的,否则,就会报错。
七、array_flip()交换数组的键和值语法
array_combine(array $array) : array
参数
array: 需要交换键值对的数组。
返回值
成功后返回一个交换了键值对的新数组,如果失败则返回null。
案例
$array=['name'=>'残破的蛋蛋','age'=>30];
$newArray=print_r(array_flip($array),true);
print_r($newArray)."
";// Array ( [残破的蛋蛋] => name [30] => age )
// 该方法不会改变原有数组。
print_r($array);// Array ( [name] => 残破的蛋蛋 [age] => 30 )
注意:该方法不会改变原有数组。
八、array_multisort()对多个数组或多维数组进行排序语法
array_multisort(array &$array1, mixed $array1_sort_order = SORT_ASC, …$array) : array
参数
array1: 要排序的数组。
array1_sort_order:排序方式。SORT_ASC:按照升序排序,SORT_DESC按照降顺序排序。
…$array:可选项,提供更多数组参与排序,提供的数组需要和array1要有相同数量的元素。
返回值
成功返回值ture,失败返回false。
案例
以下是一组从Redis中查询出来的购物车数据列表:
$cart_lists=Array
(
0=>Array
(
'title'=>'黑色连裤袜女显瘦中厚丝袜',
'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
'num'=>'1',
'goods_id'=>88,
'create_time'=>'1612083130',
'id'=>140,
'price'=>13.90,
'total_price'=>13.9,
'sku'=>'颜色 款式:黑色1条装 款式:踩脚款【高弹力70-135斤】'
),
1=>Array
(
'title'=>'黑色连裤袜女显瘦中厚丝袜',
'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
'num'=>1,
'goods_id'=>88,
'create_time'=>1612083133,
'id'=>141,
'price'=>9.90,
'total_price'=>9.9,
'sku'=>'颜色 款式:黑色1条装 款式:九分款【高弹力70-135斤】'
),
2=>Array
(
'title'=>'黑色连裤袜女显瘦中厚丝袜',
'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
'num'=>3,
'goods_id'=>88,
'create_time'=>1612082911,
'id'=>130,
'price'=>16.90,
'total_price'=>50.7,
'sku'=>'颜色 款式:黑色5条装16.9 款式:连裤款【高弹力70-135斤】',
),
4=>Array
(
'title'=>'黑色连裤袜女显瘦中厚丝袜',
'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
'num'=>1,
'goods_id'=>88,
'create_time'=>1612082923,
'id'=>133,
'price'=>16.90,
'total_price'=>16.9,
'sku'=>'颜色 款式:黑色3条装12.9 款式:连裤款【高弹力70-135斤】'
)
);
现在我们需要按照用户添加的时间倒序排列购物车里的数据,也就是把最新添加的商品显示在最前面。
$array_column=array_column($cart_lists,"create_time");
print_r($array_column);// Array ( [0] => 1612083130 [1] => 1612083133 [2] => 1612082911 [3] => 1612082923 )
array_multisort($array_column,SORT_DESC,$cart_lists);
print_r($cart_lists);
效果图:
注意:array_multisort()函数的返回值是ture和false,它是直接在原数组上进行的修改,所以如果要是输出排序后的数组,直接打印原数组即可。
九、array_product()计算数组中所有值的乘积语法
array_product(array $array) : number
参数
array: 参与计算乘积的数组。
返回值
以整数或浮点数返回一个数组中所有值的乘积。
案例
$a=array(2,4,6,9);
echo sprintf('array数组的所有值的乘积是:%d',array_product($a));// array数组的所有值的乘积是:432
以上结果会输出:array数组的所有值的乘积是:432。
十、array_sum()计算数组中所有值的和语法
array_sum(array $array) : number
参数
array: 参与计算和的数组。
返回值
以整数或浮点数返回一个数组中所有值的和。
案例
$a=array(2,4,6,9);
echo sprintf('array数组的所有值的和是:%d',array_sum($a));// array数组的所有值的和是:21
十一、array_replace()使用传递的数组替换第一个数组的元素语法
array_replace(array $array, array $replacement) : array
array_replace()函数使用后面数组元素相同的key值替换前面的数组元素。如果一个键在同时存在于两个数组中,第一个数组中的值将被第二个数组中的值替换掉。
如果一个键存在于第二个数组中,但不存在于第一个数组中,则会在第一个数组中创建这个元素。如果一个键仅存在于第一个数组中,它将保持不变。如果同时传递了多个数组,它们
将被依次处理,后面的数组覆盖前面的值。
参数
array: 被替换的数组。
replacement: 要替换前面数组的数组。
返回值
返回的是一个被替换之后的数组,如果发生错误将返回null。
案例
$array=['blue','yellow','red','lightgreen'];
$replacement1=[0=>'blue','black',2=>'yellow',4=>'voilet'];
$replacement2=[2=>'green'];
print_r(array_replace($array,$replacement1,$replacement2));
以上结果会输出:Array ( [0] => blue [1] => black [2] => green [3] => lightgreen [4] => voilet )。
十二、array_unique()移除数组中重复的值语法
array_uniqure(array $array, int $sort_flags = SORT_STRING) : array
array_uniqure()函数先将值作为字符串排序,然后每个值值保留第一个遇到的键名,接着会忽略后面所有的键名
注意:该方法会保留键名,当且仅当($string) $ele1 === (string) $ele2时,才认为两个元素相同。
参数
array: 需要去重的数组。
返回值
返回的是一个被过滤之后的新数组。
案例1
$array=['a'=>'blue','b'=>'yellow','blue','red','green','lightgreen'];
$result=array_unique($array,SORT_LOCALE_STRING);
print_r($result);
以上代码会输出:Array ( [a] => blue [b] => yellow [1] => red [2] => green [3] => lightgreen )。
案例2
$array=[4,"3",1,4,"2","4",2,3];
$result=array_unique($array,SORT_NUMERIC);
print_r($result);
以上代码会输出:Array ( [0] => 4 [1] => 3 [2] => 1 [4] => 2 )。