如何重构我的多维数组并输出为json?

时间:2017-05-31 13:23:16

标签: php arrays json multidimensional-array data-structures

我需要使用以下输入数组创建一个新数组,然后将其转换为json值。
你能帮我解决这个问题吗?

[options_label] => Color
[options_value] => Array
    (
        [0] => Red
        [1] => Blue
    )
[options_qty] => Array
    (
        [0] => 10
        [1] => 20
    )
[options_sub_label_0] => Array
    (
        [0] => Sizes
    )
[options_sub_value_0] => Array
    (
        [0] => S
        [1] => M
    )
[options_sub_qty_0] => Array
    (
        [0] => 4
        [1] => 6
    )
[options_sub_label_1] => Array
    (
        [0] => Sizes
    )
[options_sub_value_1] => Array
    (
        [0] => M
        [1] => L
    )
[options_sub_qty_1] => Array
    (
        [0] => 8
        [1] => 12
    )

这是我需要生成的json:

{
    "Color":{
        "Red":{
            "Quantity": "10",
            "Sizes":{
                "S": "4",
                "M": "6"
            }
        },
        "Blue":{
            "Quantity": "20",
            "Sizes":{
                "S": "8",
                "M": "12"
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

你可以这样做:

<?php

$newArray = array(
    "option1" => $array1,
    "option2" => $array2,
    "option3" => $array3
    );

echo(json_encode($newArray));

?>

这就是如何简单地从某些数组创建单个数组。它会帮助你

答案 1 :(得分:1)

我这样做:

$array=[
    'options_label'=>'Color',
    'options_value'=>['Red','Blue'],
    'options_qty'=>[10,20],
    'options_sub_label_0'=>['Sizes'],
    'options_sub_value_0'=>['S','M'],
    'options_sub_qty_0'=>[4,6],
    'options_sub_label_1'=>['Sizes'],
    'options_sub_value_1'=>['M','L'],
    'options_sub_qty_1'=>[8,12]
    ];
foreach($array['options_value'] as $k=>$v){
    $result[$array['options_label']][$v]=[
        "Quantity"=>$array['options_qty'][$k],
        $array["options_sub_label_$k"][0]=>array_combine($array["options_sub_value_$k"],$array["options_sub_qty_$k"])
    ];
}
echo json_encode($result);

输出:

{"Color":{"Red":{"Quantity":10,"Sizes":{"S":4,"M":6}},"Blue":{"Quantity":20,"Sizes":{"M":8,"L":12}}}}

您必须做的第一件事是从您的输入数组数组生成一个新数组。唯一棘手的部分是使用options_value中的索引/键来正确访问_sub_元素。

由于options_sub_label_只有一个元素,因此0可以访问它。 options_sub_value_options_sub_qty_最好使用array_combine()加在一起。