我有两个数组,var_dump为其提供以下值:
$ ARRAY1:
Artifacts:array(2) { [0]=> array(3) { [0]=> string(7) "module1" [1]=> string(16) "path/to/file.txt" [2]=> string(0) "" } [1]=> array(3) { [0]=> string(7) "module2" [1]=> string(17) "path/to/file2.txt" [2]=> string(0) "" } }
$数组2:
Artifacts:array(1) { [0]=> array(3) { [0]=> string(7) "module1" [1]=> string(16) "path/to/file.txt" [2]=> string(0) "" } }
我认为做array_diff($array1,$array2)
会给我一个只计算第二个元素的数组。相反,我有一个空数组。我尝试切换参数,仍然是一个empty_array,但这一次毫不奇怪。 array_diff
不会对数组数组起作用吗?
答案 0 :(得分:6)
当且仅当
(string) $elem1 === (string) $elem2
时,才认为两个元素相等。用文字表示:当字符串表示相同时。
echo (string) array();
只提供Array
,因此对于array_diff
,您的数组看起来像:
$array1 = array('Array', 'Array');
$array2 = array('Array');
所以要为你的数组创建一个diff,你需要这样的东西(假设数组中的每个元素本身就是一个数组):
$diff = array();
foreach($array1 as $val1) {
$contained = false;
foreach($array2 as $val2) {
if(count(array_diff($val1, $val2)) == 0) {
$contained = true;
break;
}
}
if(!$contained) {
$diff[] = $val1;
}
}
免责声明:这或多或少只是草图。
答案 1 :(得分:3)
来自array_diff文档。
此函数仅检查n维数组的一维。当然你可以使用array_diff($ array1 [0],$ array2 [0])来检查更深的维度;
答案 2 :(得分:1)
来自array_diff manual page:“此函数仅检查n维数组的一个维度。当然,您可以使用array_diff($ array1 [0],$ array2 [0]);来检查更深的维度。 “
答案 3 :(得分:0)
在这里提问并回答: