我试图得到两个文件的差异:
$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"}] )
我该如何处理这个?
您需要先将JSON对象转换为数组,然后找出两个数组之间的差异。要将JSON字符串转换为数组,使用json_decode()
和true
作为第二个参数:
$firstArray = json_decode($first, true);
如果省略第二个参数,$ firststarray将是一个对象,即stdClass
的实例。
但是首先您需要文件的内容作为字符串,所以最好使用file_get_contents()
:
$first = file_get_contents('lalala.json');
更新:
即使已经正确地将JSON字符串转换为数组,仍然会遇到问题,因为array_diff()
只适用于一维数组,正如文档的Notes
部分所提到的那样。要能够在多维数组上使用in,请查看文档中的注释。
你的意思可能是
$first = json_decode(file_get_contents('lalala.json'), true);
$second = json_decode(file_get_contents('alabala.json'), true);