2013-08-28 3 views
1

Я пытаюсь сортировать каждый файл в каталоге, читать данные json, декодировать его, помещать в массив и затем записывать все в новый файл.Консолидация данных JSON в PHP?

Проблема, с которой я столкнулся, - это результирующий массив, это просто массив массивов данных json.

Вот мой код:

$AllAppointmentDataFileName = 'AllAppointmentData.jsonp'; 
    $AllAppointmentDataURL = '../Appointments/' . $AllAppointmentDataFileName; 
    if ($handle = opendir('../Appointments')) { 

     while (false !== ($entry = readdir($handle))) { 
      if ($entry != "." && $entry != ".." && $entry != $AllAppointmentDataFileName) { 

       $AllAppointmentData .= json_decode(file_get_contents('../Appointments/' . $entry)); 

       print_r($AllAppointmentData); echo "<br>"; 

       echo "$entry:<br>" . file_get_contents('../Appointments/' . $entry) . "<br>"; 
      } 
     } 

     closedir($handle); 
    } 

    file_put_contents($AllAppointmentDataURL, json_encode($AllAppointmentData)); 

print_r просто возвращает "Array."

ответ

3

Оператор .= предназначен для конкатенации строк; это не для добавления элемента в массив.

Вы должны использовать [] = вместо:

$AllAppointmentData[] = json_decode(file_get_contents('../Appointments/' . $entry)); 

Если ваши файлы содержат массивы, которые вы хотите объединить в единый массив, вы можете использовать цикл Еогеасп:

$curAppointmentData = json_decode(file_get_contents('../Appointments/' . $entry)); 
foreach ($curAppointmentData as $obj) { 
    $AllAppointmentData[] = $obj; 
} 
+2

Да, причина ' print_r' prints «Array» - это потому, что массив, полученный из 'json_decode', передается в строку. – migg

+0

Хорошо. Я изменил это. Теперь, в моем json-файле, он ведет с '' [['', так как есть два файла. Это все еще считается правильным JSON-форматом (который будет доступен для чтения любым декодером/считывателем JSON)? Я думаю, что формат в настоящий момент является «[[{« Имя »:« Значение »,« Имя »:« Значение »}] [{« Имя »:« Значение »,« Имя »:« Значение »}]]' – JVE999

+1

@ Джамиль: Помимо недостающей запятой между двумя массивами, да, это действительно JSON. – PleaseStand