为什么array_diff() 给出数组到字符串的转换错误?

我得到以下行的数组到字符串转换错误:

$diff = array_diff($stockist, $arr);

此处为从 JSON 文件解码的数组。使用该函数,我能够验证两个参数都是数组。有人可以给我指出问题吗?$arris_array()

$stockist = array();
while (!feof($file_handle)) {

    $line_of_text = fgetcsv($file_handle);
    $query = "SELECT * FROM reorderchart WHERE medicine = '"
        . trim($line_of_text[3])
        . "' ORDER BY medicine";
    $result = mysql_query($query);

    if (trim($line_of_text[2]) - trim($line_of_text[1]) <= 0) {

        while ($row = mysql_fetch_array($result)) {

            $file = "results.json";
            $arr = json_decode(file_get_contents($file),true);
            $pharmacy = trim($row['Medicine']);

            if (isset($stockist[$pharmacy])) {

                $medicine = $stockist[$pharmacy];
                $medicine[] = trim($row['Stockist']);
                $stockist[$pharmacy] = $medicine;

            } else {

                $medicine = array();
                $medicine[] = trim($row['Stockist']);
                $stockist[$pharmacy] = $medicine;
            }
        }
    }
}
$diff = array();
$diff = array_diff_assoc($stockist,$arr);
ksort($diff);
foreach ($diff as $key => $value) {

    echo "<table align='center' border='1'>";
    echo "<tr><td align = 'center'> <font color = 'blue'> $key</td></tr>";

    foreach($value as $key1 => $value1) {

        echo "<tr><td align ='center'>$value1</td></tr><br>";
    }
    echo "</table>";
}

答案 1

根据它:

php -r 'array_diff(array("a" => array("b" => 4)), array(1));'
PHP Notice:  Array to string conversion in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. array_diff() Command line code:1

其中一个数组是多维的。

array_diff仅检查 n 维数组的一个维度。当然,您可以使用以下命令检查更深层次的尺寸array_diff($array1[0], $array2[0]);


答案 2

是的,严格的答案是因为“你的一个数组是多维的。

另一个有用的注意事项可能是 - 取决于您进一步解析实际差异的需要 - 考虑首先使用以下命令测试您的数组:

$diff = strcmp(json_encode($stockist), json_encode($arr));

$diff = strspn(json_encode($stockist) ^ json_encode($arr), "\0");

$diff = xdiff_string_diff(json_encode($stockist), json_encode($arr));

所有这些选项都将比较整个数组树,而不仅仅是顶层。