Array_diff没有参与参数

时间:2013-05-09 13:29:49

标签: php arrays multidimensional-array array-difference

我试图找出两个文件的区别:

$first = file('lalala.json');
$second = file('alabala.json');
//print_r($first);
//print_r($second);
$first_result = array_diff($first[0], $second[0]);
//$second_result = array_diff($second, $first);
print_r($first_result);
//print_r($second_result);

lalala.json的内容是:

`[{"name":"Tim Pearson","id":"17118"},{"name":"Ashley Danchen Chen","id":"504829084"},{"name":"Foisor Veronica","id":"100005485446135"}]`

alabala.json的内容是

 `[{"name":"Tim Pearson","id":"17118"},{"name":"Foisor Veronica","id":"100005485446135"}]`

然而问题是我收到错误,因为内容不会被识别为数组(错误是Argument #1 is not an array)。如果我array_diff($first, $second),则输出将是$first的内容

Array ( [0] => [{"name":"Tim Pearson","id":"17118"},{"name":"Ashley Danchen Chen","id":"504829084"},{"name":"Foisor Veronica","id":"100005485446135"}] )

我该如何处理?

2 个答案:

答案 0 :(得分:0)

您需要先将JSON对象转换为数组,然后找到两个数组之间的差异。要将JSON字符串转换为数组,请使用json_decode()并将true作为第二个参数:

$firstArray = json_decode($first, true);

如果保留第二个参数,$ firstArray将是一个对象,即stdClass的实例。

但首先您需要将文件内容作为字符串,因此最好使用file_get_contents()

$first = file_get_contents('lalala.json');

<强>更新
即使你已经将JSON字符串正确地转换为数组,你仍然会遇到问题,因为array_diff()仅适用于一维数组,正如文档的Notes部分所述。为了能够在多维数组上使用,请查看文档的this comment

答案 1 :(得分:0)

你可能意味着

$first = json_decode(file_get_contents('lalala.json'), true);
$second = json_decode(file_get_contents('alabala.json'), true);