使用多维数组调用array_diff_assoc()时出现"Array to string conversion error"错误。

85

以下代码行会导致数组转换成字符串错误:

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

这里,$arr 是从 JSON 文件解码得到的数组。使用 is_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>";
}

4
可能原因:多维数组。 - Viacheslav Kondratiuk
"两个参数都是数组"。没错,PHP 也没有说什么不同的。问题在于“数组转换为字符串”,而不是相反。问题是这些数组包含了什么。 - geomagas
1
@viakondratiuk 是的,它是多维的。但是 array_diff() 函数只评估第一层级吗? - user2963765
@user2963765 这个函数只能检查一个 n 维数组的一个维度。当然,您可以使用 array_diff($array1[0], $array2[0]) 来检查更深层次的维度。 - Viacheslav Kondratiuk
你可以使用递归数组差异。查看这个 https://gist.github.com/jondlm/7709e54f84a3f1e1b67b,它解决了我的问题... - geneowak
很遗憾,这个问题不是很清楚,因为它没有展示被比较的两个数组的样本数据(作为 [mcve] 的一部分)。 - mickmackusa
11个回答

0

我们收到了将数组转换为字符串的警告,因为array_diff在比较之前将元素转换为字符串...而我们传递的是整数,关键是添加一个包装对象,因为对象可以被强制转换为字符串,然后当比较完成后我们将它们返回到整数,如下所示

或者-

您可以使用一个库https://github.com/voku/Arrayy#diffarray-array-static,它有一个名为diff()的方法,可以直接比较整数和其他数据类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接