2013-05-09 1 views
1

Я пытаюсь получить разницу двух файлов:array_diff не принимает в качестве аргументов

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

Как мне справиться с этим?

ответ

0

Сначала необходимо преобразовать объекты JSON в массивы, а затем найти разницу между двумя массивами. Для того, чтобы преобразовать строку JSON в массив использования json_decode() с true в качестве второго параметра:

$firstArray = json_decode($first, true); 

Если оставить второй параметр из, $ firstArray будет объект, который является экземпляром stdClass.

Но сначала вам нужно содержимое файла в виде строки, так что лучше использовать file_get_contents():

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

Update:
Даже если вы конвертировали строки JSON должным образом в массив, у вас все еще будет проблема, так как array_diff() работает только с одномерными массивами, как это указано в разделе документации Notes. Чтобы иметь возможность использовать в многомерных массивах, посмотрите на документацию this comment.

+0

Что истинное среднее? В этом контексте, конечно, –

+0

Он преобразует строку в массив вместо объекта (экземпляр stdClass) – Havelock

+0

Но теперь по какой-то причине выход представляет собой пустой массив. –

0

Вы, вероятно, означает

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

 Смежные вопросы

  • Нет связанных вопросов^_^