从json_decode到array(array())

时间:2016-04-08 13:40:02

标签: json multidimensional-array

感谢您查看这个问题 - 我对php非常陌生并且在数组上阅读了大量帖子,但似乎无法找到我需要的答案。

我有一个json字符串,我使用json_decode($string, true)解码。它最多嵌套四层,嵌套级别因文件而异。

我想构建一个关联数组,这样我最终可以将它转换成mysql。

我遇到问题的解码文件部分是:

[LineItems] => Array
    (
        [0] => Array
            (
                [ItemNumber] => 1
                [Category] => Prep Sink with 18"DB
                [SubLineItems] => Array
                    (
                        [0] => Array
                            (
                                [ItemTypeCode] => 0
                                [ItemTypeDescription] => Normal
                                [VendorId] => 55d14674-f295-4f9c-9c37-79f2
                                ... deleted for readability

                                [CustomerSpecificPricings] => Array
                                    (
                                    .... deleted for readablity
                                    )

        [1] => Array
            (
                [ItemNumber] => 2
                [Category] => Combi Oven
                [SubLineItems] => Array
                    (
                        [0] => Array
                            (
                                ....
                                    (
                                    )

                                [ElectricalUtilityGrids] => Array
                                    (
                                    .... 
                                    )

使用foreeach时,我可以使用以下代码构建[LineItems]数组:

$LineItems=array();

foreach($data['LineItems'] as $lineitems => $lineitem){
    $lineadd=array(
        $ItemNumber=$lineitem['ItemNumber'],
        $Category=$lineitem['Category']
        );
}

但是当我尝试添加嵌套数组时:

$LineItems=array();
$SubLineItems=array();

foreach($data['LineItems'] as $lineitems => $lineitem){
    $lineadd=array(
        $ItemNumber=$lineitem['ItemNumber'],
        $Category=$lineitem['Category']
        );
        $LineItems[]=$lineadd;
            foreach($data[LineItems]['SubLineItems'] as $sublineitem =>    $sublineitems){
                $sublineadd[]=array(
                $ItemTypeCode=$sublineitem['ItemTypeCode'],
                $ItemTypeDescription=$sublineitem['ItemTypeDescription'],
                $VendorId=$sublineitem['VendorId'],
                ... deleted rest of list for readability
                );
            $SubLineItems[] = $sublineadd;
            }
    }

在尝试访问SubLineItems的嵌套foreach中,我尝试过:

($lineitem as $sublineitem => $sublineitems), 
($data[SubLineItems] as $sublineitem => $sublineitems), 
($data[LineItem][SubLineItem] as $sublineitem => $sublineitems)

除了能够将LineItems.SubLineItems索引传递给循环之外......

我在尝试这个时收到了多个错误......我做错了什么?

1 个答案:

答案 0 :(得分:0)

我用这个解决了我的问题:

$new_array=array();
$iterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator($json),
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $key => $item) {
        $new_array[$key]=$item;        
        }

有更好的解决方案吗?

相关问题