有关如何重构以下json的任何想法:
$jsonArray = [{"Level":"77.2023%","Product":"Milk","Temperature":"4"},
{"Level":"399.2023%","Product":"Coffee","Temperature":"34"},
{"Level":"109.2023%","Product":"Chocolate","Temperature":"14"}]
预期结果:
$expected = {"Milk":{"Level":"77.2023%","Temperature":"4"},
"Coffee":{"Level":"399.2023%","Temperature":"34"},
"Chocolate":{"Level":"109.2023%","Temperature":"14"}
}
我是新手,我的想法是获取数组中的乘积值,然后再次使用foreach循环查找其他值?
答案 0 :(得分:1)
这是一种可能性:
$jsonArray = '[{"Level":"77.2023%","Product":"Milk","Temperature":"4"},
{"Level":"399.2023%","Product":"Coffee","Temperature":"34"},
{"Level":"109.2023%","Product":"Chocolate","Temperature":"14"}]';
$output = array();
foreach (json_decode($jsonArray, true) as $row) {
$product = $row['Product'];
$output[$product] = $row;
unset($output[$product]['Product']);
}
echo json_encode($output);
输出:
{"Milk":{"Level":"77.2023%","Temperature":"4"},
"Coffee":{"Level":"399.2023%","Temperature":"34"},
"Chocolate":{"Level":"109.2023%","Temperature":"14"}
}
答案 1 :(得分:0)
这有一些窍门
$a = '[{"Level":"77.2023%","Product":"Milk","Temperature":"4"},
{"Level":"399.2023%","Product":"Coffee","Temperature":"34"},
{"Level":"109.2023%","Product":"Chocolate","Temperature":"14"}]';
$newAr = array();
foreach(json_decode($a,true) as $key=>$value)
{
$newAr[$value['Product']] = array(
'Level' => $value['Level'],
'Temperature' => $value['Temperature'],
);
}
答案 2 :(得分:0)
有许多方法可以在PHP中使用Loops执行此操作。其他答案准确地证明了这一点。我还建议您在代码中集成某种形式的错误处理,数据验证/过滤/限制,以免日后出现意外结果。
例如,将json_decode()分配给变量pre-foreach或直接在foreach()第一个参数中将仅在原始json无效json时发出警告,并跳过过去的建立最终目标。然后,如果将结果(可能已失败)直接传递到下一个逻辑构造,则可能会产生一些iffy-behavior。
此外,在数据验证和过滤的概念上,您可以使用if(in_array()..来限制foreach()或任何其他循环机制来检查Product_List_Array [Milk,Coffee,Chocolate]。 。),因此最终/目标对象仅包含预期的产品,在原始json具有其他工件的情况下。过滤这些值还可以提高稳定性,例如限制浮点温度。