批改状态:合格
老师批语:
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 $array, array ...$arrays) : array
参数
array: 要被比对的数组
arrays: 更多比较的数组
返回值
返回一个数组,其中包含array中所有其他数组中不存在的所有值。注意和array_diff()不同的是键名也用于比较。
案例
$array1 = ["name" => '张三', "李四", "王五", "赵六"];$array2 = ["nick" => '张三', "李四", "狗子", "柱子"];$result1 = array_diff($array1, $array2);echo print_r($result1, true)."<br>"; // 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 $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 …$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 $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_combine(array $array) : array
array: 需要交换键值对的数组。
成功后返回一个交换了键值对的新数组,如果失败则返回null。
$array = ['name' => '残破的蛋蛋', 'age' => 30];$newArray = print_r(array_flip($array), true);print_r($newArray)."<br>"; // Array ( [残破的蛋蛋] => name [30] => age )// 该方法不会改变原有数组。print_r($array); // Array ( [name] => 残破的蛋蛋 [age] => 30 )
注意:该方法不会改变原有数组。
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 $array) : number
array: 参与计算乘积的数组。
以整数或浮点数返回一个数组中所有值的乘积。
$a = array(2, 4, 6, 9);echo sprintf('array数组的所有值的乘积是:%d', array_product($a)); // array数组的所有值的乘积是:432
以上结果会输出:array数组的所有值的乘积是:432。
array_sum(array $array) : number
array: 参与计算和的数组。
以整数或浮点数返回一个数组中所有值的和。
$a = array(2, 4, 6, 9);echo sprintf('array数组的所有值的和是:%d', array_sum($a)); // array数组的所有值的和是:21
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_uniqure(array $array, int $sort_flags = SORT_STRING) : array
array_uniqure()函数先将值作为字符串排序,然后每个值值保留第一个遇到的键名,接着会忽略后面所有的键名
注意:该方法会保留键名,当且仅当($string) $ele1 === (string) $ele2时,才认为两个元素相同。
array: 需要去重的数组。
返回的是一个被过滤之后的新数组。
$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 )。
$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 )。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号