1

私は2つのファイルの違いを取得しようとしています:

$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"}] )

これをどのように処理すればよいですか?

4

2 に答える 2

0

最初に JSON オブジェクトを配列に変換してから、2 つの配列の違いを見つける必要があります。JSON 文字列を配列に変換するには、2 番目のパラメーターとして使用json_decode()します。true

$firstArray = json_decode($first, true);

2 番目のパラメータを省略した場合、$firstArray は のインスタンスであるオブジェクトになりますstdClass

ただし、最初にファイルのコンテンツを文字列として必要とするため、次のように使用することをお勧めしますfile_get_contents()

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

更新:
JSON 文字列を適切に配列に変換した場合でも、ドキュメントのセクションで説明array_diff()されているように、1 次元配列でのみ機能するため、まだ問題があります。Notes多次元配列で使用できるようにするには、ドキュメントのこのコメントをご覧ください。

于 2013-05-09T13:32:53.070 に答える