为什么数组数组上的array_diff返回一个空数组?

Eld*_*ros 4 php

我有两个数组,var_dump为其提供以下值:

$阵列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) "" } }
Run Code Online (Sandbox Code Playgroud)

$数组2:

Artifacts:array(1) { [0]=>  array(3) { [0]=>  string(7) "module1" [1]=>  string(16) "path/to/file.txt" [2]=>  string(0) "" } }
Run Code Online (Sandbox Code Playgroud)

我认为这样做array_diff($array1,$array2)会给我一个只计算第二个元素的数组.相反,我有一个空数组.我尝试切换参数,仍然是一个empty_array,但这一次毫不奇怪.不适array_diff用于数组数组?

Fel*_*ing 6

文档:

当且仅当两个元素被认为是相等的(string) $elem1 === (string) $elem2.用文字表示:当字符串表示相同时.

echo (string) array();给你只是Array,所以array_diff,你的阵列是这样的:

$array1 = array('Array', 'Array');
$array2 = array('Array');
Run Code Online (Sandbox Code Playgroud)

因此,要为数组创建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;
    }
}
Run Code Online (Sandbox Code Playgroud)

免责声明:这或多或少只是草图.