我有两个数组,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
不能用于数组的数组吗?
最佳答案
来自documentation :
Two elements are considered equal if and only if
(string) $elem1 === (string) $elem2
. In words: when the string representation is the same.
echo (string) array();
只为您提供 Array
,因此对于 array_diff
,您的数组如下所示:
$array1 = array('Array', 'Array');
$array2 = array('Array');
因此,要为您的数组创建差异,您需要这样的东西(假设数组中的每个元素本身都是一个数组):
$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;
}
}
免责声明:这或多或少只是一个草图。
关于php - 为什么数组数组上的 array_diff 返回一个空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955623/