2014-12-10 1 views
3

Я пытаюсь написать приложение списка покупок для сайта, на котором уже есть компоненты, перечисленные в JSON.Слияние и добавление значений двух каналов JSON в PHP

Полный код внизу, но только для объяснения; То, что я собираюсь сделать, - это объединить 2 массива, добавив значения из «количества», когда «имя» (и предпочтительно также «меру») соответствует.

например. «Подсолнечное масло» указано в обоих каналах JSON. я хочу его к выходу, как:

{"name":"Sunflower oil","quantity":110,"measure":"ml"} 

, но в настоящее время он переписывает JSON и выход:

{"name":"Sunflower oil","quantity":10,"measure":"ml"}, 

Любая помощь в том, что я делаю неправильно было бы весьма признателен, как JSON и объектов/массивы - не моя сильная сторона!

Заранее спасибо - вот мой код:

<?php 
$a = '{"ingredients":[{"name": "Sunflower oil","quantity": 100,"measure": "ml"}]}'; 
$b = '{"ingredients":[{"name": "Sunflower oil","quantity": 10,"measure": "ml"},{"name": "Fennel seeds","quantity": 1,"measure": "teaspoon"},{"name": "Garlic","quantity": 1,"measure": "clove"}]}'; 
print_r(json_encode(array_merge(json_decode($a, true),json_decode($b, true)))); 
?> 

ответ

1

Вы можете использовать следующий код, чтобы получить ожидаемый результат:

<?php 
$a = '{"ingredients":[{"name": "Sunflower oil","quantity": 100,"measure": "ml"},{"name": "Olive oil","quantity": 50,"measure": "ml"}]}'; 
$b = '{"ingredients":[{"name": "Sunflower oil","quantity": 10,"measure": "ml"},{"name": "Fennel seeds","quantity": 1,"measure": "teaspoon"},{"name": "Garlic","quantity": 1,"measure": "clove"}]}'; 

$aArr = json_decode($a, true); 
$bArr = json_decode($b, true); 
$sumArr = array("ingredients" => array()); 

foreach ($aArr['ingredients'] as $valA) { 
    foreach ($bArr['ingredients'] as $keyB => $valB) { 
     if ($valA['name'] == $valB['name'] && 
      $valA['measure'] == $valB['measure']) { 

      $valA['quantity'] += $valB['quantity']; 
      $sumArr['ingredients'][] = $valA; 

      unset($bArr['ingredients'][$keyB]); 
      continue 2; 
     } 
    } 
    $sumArr['ingredients'][] = $valA; 
} 
$sumArr['ingredients'] = array_merge($sumArr['ingredients'], $bArr['ingredients']); 
print_r(json_encode($sumArr)); 
?> 
+0

Спасибо :) это здорово. – Nick

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