我正在尝试为已经在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))) );
?>
答案 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 ));
?>