PHP在数组json中提取键值并进行重组

时间:2019-01-17 06:19:54

标签: php arrays json

有关如何重构以下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循环查找其他值?

3 个答案:

答案 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"}
}

Demo on 3v4l.org

答案 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具有其他工件的情况下。过滤这些值还可以提高稳定性,例如限制浮点温度。