<?php // array_intersect 的用法是返回一个关联数组(键是第一个参数数组的键), // 该数组包含了所有在 $array1 中同时也出现在其他参数数组中的值 // 下面的 0,1 键是手动加上去的, 可以去掉, 默认就是 0,1 $array1 = [ "a" => "green", 0 => "red", 1 => "blue", 2 => 'white' ]; $array2 = [ "b" => "green", "yellow", "red", 'white', ]; var_dump($array1, $array2);
// 只比较值 echo "array_intersect($array1, $array2): "; var_dump(array_intersect($array1, $array2)); echo "array_intersect_key($array1, $array2): "; // 只比较键, 只返回键相同的对应数组项(值是第一个参数数组的值), 反正都是返回第一个参数数组里面的项 var_dump(array_intersect_key($array1, $array2)); echo "array_intersect_assoc($array1, $array2): "; // 同时比较键值, 可以看做是融合了 array_intersect、array_intersect_key 的功能 // 只有键值对同时相同的时候才会返回 var_dump(array_intersect_assoc($array1, $array2)); function compare($key1, $key2) { if ($key1 == $key2) { // 这里使用 === 的时候, array_intersect_ukey 返回的数组中没有 key 为 0 的项 return 0; } return ($key1 > $key2) ? 1 : -1; } echo "array_intersect_ukey($array1, $array2): "; // array_intersect_ukey 使用自定义函数进行键比较 // !!! 使用该方法需要注意的是, 比较的数组不是关联数组的时候可能会导致错误(上面的例子中 'a' == 0 其实是 true) var_dump(array_intersect_ukey($array1, $array2, 'compare')); echo "array_intersect_uassoc($array1, $array2): "; // array_intersect_uassoc 使用自定义函数进行键比较 // 同时比较键值, 值的比较使用内置函数 var_dump(array_intersect_uassoc($array1, $array2, 'compare'));
输出:
array(4) { ["a"]=> string(5) "green" [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(5) "white" } array(4) { ["b"]=> string(5) "green" [0]=> string(6) "yellow" [1]=> string(3) "red" [2]=> string(5) "white" } array_intersect($array1, $array2): array(3) { ["a"]=> string(5) "green" [0]=> string(3) "red" [2]=> string(5) "white" } array_intersect_key($array1, $array2): array(3) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(5) "white" } array_intersect_assoc($array1, $array2): array(1) { [2]=> string(5) "white" } array_intersect_ukey($array1, $array2): array(2) { [1]=> string(4) "blue" [2]=> string(5) "white" } array_intersect_uassoc($array1, $array2): array(1) { [2]=> string(5) "white" }