PHP常用的数组函数

一、array_diff 计算数组的差集

  • 语法
  1. array_diff(array $array, array ...$arrays) : array
  • 参数

array: 要被比对的数组

arrays: 更多比较的数组

  • 返回值

该函数的返回值是一个数组,该数组中包含了在array中但是不在其他数组中的值。值得注意的是,返回的值它对应的键名不会改变,即:保留原数组的键

  • 案例
  1. $array1 = ["name" => '张三', "李四", "王五", "赵六"];
  2. $array2 = ["nick" => '张五', "赵六", "李四", "柱子"];
  3. $result = array_diff($array1, $array2);
  4. echo print_r($result, true); // Array ( [name] => 张三 [1] => 王五 )

二、array_diff_assoc带索引检查计算数组的差集

  • 语法
  1. array_diff_assoc(array $array, array ...$arrays) : array
  • 参数
    array: 要被比对的数组
    arrays: 更多比较的数组

  • 返回值
    返回一个数组,其中包含array中所有其他数组中不存在的所有值。注意和array_diff()不同的是键名也用于比较。

  • 案例

  1. $array1 = ["name" => '张三', "李四", "王五", "赵六"];
  2. $array2 = ["nick" => '张三', "李四", "狗子", "柱子"];
  3. $result1 = array_diff($array1, $array2);
  4. echo print_r($result1, true)."<br>"; // Array ( [1] => 王五 [2] => 赵六 )
  5. $result2 = array_diff_assoc($array1, $array2);
  6. 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()不用的是键名也用于比较。

  • 案例
  1. $array1 = ["name" => '张三', "李四", "王五", "赵六"];
  2. $array2 = ["nick" => '张三', "李四", "赵六", "柱子"];
  3. $result = array_intersect_assoc($array1, $array2);
  4. echo print_r($result, true); // Array ( [0] => 李四 )

五、array_merge()合并一个或多个数组

  • 语法

array_merge(array …$arrays) : array

  • 参数

arrays: 要合并的一个或多个数组

  • 返回值

返回一个合并后的结果数组。

  • 注意

如果输入的数组中有相同的字符串键名那么后者的值将覆盖前者,但是如果数组包含数字键名,后面的值将不会覆盖原来的值,而是会附加在数组后面。

  • 案例
  1. $array1 = ['color' => 'blue', 3, 5];
  2. $array2 = ['a', 5, 'color' => 'red', 10];
  3. print_r(array_merge($array1, $array2));
  4. // 结果:
  5. // // 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

  1. $array1 = ['color' => 'blue', 3, 5];
  2. $array2 = ['a', 5, 'color' => 'red', 10];
  3. print_r(array_combine($array1, $array2));
  • 结果图:

array_combine

正确的代码应该是下面的:

  1. $array1 = ['color' => 'blue', 3, 5];
  2. $array2 = ['a', 5, 'color' => 'red'];
  3. print_r(array_combine($array1, $array2)); // Array ( [blue] => a [3] => 5 [5] => red )

这里有一点值得注意的是:两个数组的单元数量必须是一致的,否则,就会报错。

七、array_flip()交换数组的键和值

  • 语法

array_combine(array $array) : array

  • 参数

array: 需要交换键值对的数组。

  • 返回值

成功后返回一个交换了键值对的新数组,如果失败则返回null。

  • 案例
  1. $array = ['name' => '残破的蛋蛋', 'age' => 30];
  2. $newArray = print_r(array_flip($array), true);
  3. print_r($newArray)."<br>"; // Array ( [残破的蛋蛋] => name [30] => age )
  4. // 该方法不会改变原有数组。
  5. 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中查询出来的购物车数据列表:

  1. $cart_lists = Array
  2. (
  3. 0 => Array
  4. (
  5. 'title' => '黑色连裤袜女显瘦中厚丝袜',
  6. 'image' => 'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
  7. 'num' => '1',
  8. 'goods_id' => 88,
  9. 'create_time' => '1612083130',
  10. 'id' => 140,
  11. 'price' => 13.90,
  12. 'total_price' => 13.9,
  13. 'sku' => '颜色 款式:黑色1条装 款式:踩脚款【高弹力70-135斤】'
  14. ),
  15. 1 => Array
  16. (
  17. 'title' => '黑色连裤袜女显瘦中厚丝袜',
  18. 'image' => 'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
  19. 'num' => 1,
  20. 'goods_id' => 88,
  21. 'create_time' => 1612083133,
  22. 'id' => 141,
  23. 'price' => 9.90,
  24. 'total_price' => 9.9,
  25. 'sku' => '颜色 款式:黑色1条装 款式:九分款【高弹力70-135斤】'
  26. ),
  27. 2 => Array
  28. (
  29. 'title' => '黑色连裤袜女显瘦中厚丝袜',
  30. 'image' => 'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
  31. 'num' => 3,
  32. 'goods_id' => 88,
  33. 'create_time' => 1612082911,
  34. 'id' => 130,
  35. 'price' => 16.90,
  36. 'total_price' => 50.7,
  37. 'sku' => '颜色 款式:黑色5条装16.9 款式:连裤款【高弹力70-135斤】',
  38. ),
  39. 4 => Array
  40. (
  41. 'title' => '黑色连裤袜女显瘦中厚丝袜',
  42. 'image' => 'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',
  43. 'num' => 1,
  44. 'goods_id' => 88,
  45. 'create_time' => 1612082923,
  46. 'id' => 133,
  47. 'price' => 16.90,
  48. 'total_price' => 16.9,
  49. 'sku' => '颜色 款式:黑色3条装12.9 款式:连裤款【高弹力70-135斤】'
  50. )
  51. );

现在我们需要按照用户添加的时间倒序排列购物车里的数据,也就是把最新添加的商品显示在最前面。

  1. $array_column = array_column($cart_lists, "create_time");
  2. print_r($array_column); // Array ( [0] => 1612083130 [1] => 1612083133 [2] => 1612082911 [3] => 1612082923 )
  3. array_multisort($array_column, SORT_DESC, $cart_lists);
  4. print_r($cart_lists);
  • 效果图:

array_multisort

注意:array_multisort()函数的返回值是ture和false,它是直接在原数组上进行的修改,所以如果要是输出排序后的数组,直接打印原数组即可。

九、array_product()计算数组中所有值的乘积

  • 语法

array_product(array $array) : number

  • 参数

array: 参与计算乘积的数组。

  • 返回值

以整数或浮点数返回一个数组中所有值的乘积。

  • 案例
  1. $a = array(2, 4, 6, 9);
  2. echo sprintf('array数组的所有值的乘积是:%d', array_product($a)); // array数组的所有值的乘积是:432

十、array_sum()计算数组中所有值的和

  • 语法

array_sum(array $array) : number

  • 参数

array: 参与计算和的数组。

  • 返回值

以整数或浮点数返回一个数组中所有值的和。

  • 案例
  1. $a = array(2, 4, 6, 9);
  2. echo sprintf('array数组的所有值的和是:%d', array_sum($a)); // array数组的所有值的和是:21

十一、array_replace()使用传递的数组替换第一个数组的元素

  • 语法

array_replace(array $array, array $replacement) : array

array_replace()函数使用后面数组元素相同的key值替换前面的数组元素。如果一个键在同时存在于两个数组中,第一个数组中的值将被第二个数组中的值替换掉。
如果一个键存在于第二个数组中,但不存在于第一个数组中,则会在第一个数组中创建这个元素。如果一个键仅存在于第一个数组中,它将保持不变。如果同时传递了多个数组,它们
将被依次处理,后面的数组覆盖前面的值。

  • 参数

array: 被替换的数组。
replacement: 要替换前面数组的数组。

  • 返回值

返回的是一个被替换之后的数组,如果发生错误将返回null。

  • 案例
  1. $array = ['blue', 'yellow', 'red', 'lightgreen'];
  2. $replacement1 = [0 => 'blue', 'black', 2 => 'yellow', 4 => 'voilet'];
  3. $replacement2 = [2 => 'green'];
  4. print_r(array_replace($array, $replacement1, $replacement2));

十二、array_unique()移除数组中重复的值

  • 语法

array_uniqure(array $array, int $sort_flags = SORT_STRING) : array

array_uniqure()函数先将值作为字符串排序,然后每个值值保留第一个遇到的键名,接着会忽略后面所有的键名

注意:该方法会保留键名,当且仅当($string) $ele1 === (string) $ele2时,才认为两个元素相同。

  • 参数

array: 需要去重的数组。

  • 返回值

返回的是一个被过滤之后的新数组。

  • 案例1
  1. $array = ['a' => 'blue', 'b' => 'yellow', 'blue', 'red', 'green', 'lightgreen'];
  2. $result = array_unique($array, SORT_LOCALE_STRING);
  3. print_r($result);
  • 案例2
  1. $array = [4, "3", 1, 4, "2", "4", 2, 3];
  2. $result = array_unique($array, SORT_NUMERIC);
  3. print_r($result);

更多相关文章

  1. 数组函数练习
  2. php学习笔记(数组函数_差集和交集的运算汇总)
  3. 0126-数据类型的转换与检测技术,变量与常用声明及使用
  4. 数据类型的转换、变量与常量声明和使用
  5. php函数作用域与闭包|回调与参数-函数多值返回类型
  6. php常用数组函数以及数组的交集,差集,并集
  7. 数组的排序, 数组的合并, 数组成员的统计
  8. php学习笔记(函数相关_作用域_闭包_回调_多指返回)
  9. 认识函数的类型、参数与返回值

随机推荐

  1. 微服务应用性能如何?APM监控工具来告诉你!
  2. Mall 电商实战项目发布重大更新,全面支持S
  3. 不要再重复造轮子了,这款开源工具类库贼好
  4. Could not initialize derby.jdbc.Autolo
  5. Docker服务开放了这个端口,服务器分分钟变
  6. RabbitMQ实现即时通讯居然如此简单!连后端
  7. mall-swarm 微服务电商项目发布重大更新,
  8. 还在手写CRUD代码?这款开源框架助你解放双
  9. 今天开始学习C
  10. OpenYurt v0.3.0 重磅发布:全面提升边缘场