为什么数组数组上的array_diff返回一个空数组?
问题描述:
我有两个数组,对其中的var_dump给出以下值:为什么数组数组上的array_diff返回一个空数组?
$阵列1:
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
不会在数组的数组上工作吗?
答
两个元件被认为是相等当且仅当
(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;
}
}
免责声明:这或多或少只是一个草图。
如果我理解正确的话,我会写我自己的功能,看是否有两个数组之间的差异,对吗? – Eldros 2011-02-10 10:14:05