在PHP中合并和添加2个JSON提要的值

时间:2014-12-10 17:40:54

标签: arrays array-merge

我正在尝试为已经在JSON中列出成分的网站编写购物清单应用程序。

完整的代码位于底部,但只是为了解释;我的目标是能够合并2个数组,当'name'(最好也是'measure')匹配时,从'quantity'中添加值。

e.g。两种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 个答案:

答案 0 :(得分: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 ));
?>