2016-04-08 16 views
1

この質問をお寄せいただきありがとうございます - 私は非常にPHPに新しいと配列の記事のトンを読んだが、私は必要な答えを見つけることができないようです。json_decodeから配列(array())への多次元配列

私はjson_decode($string, true)を使用してデコードするjson文字列を持っています。ネストされたレベルは最大4層までネストされ、ネストされたレベルはファイルごとに異なります。

私は最終的に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'] 
     ); 
} 

しかし、 SubLineItems I Hにアクセスしようとしているネストされたのforeachで

$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; 
      } 
    } 

:私は、ネストされた配列を追加しようとすると、試してみましたAVE:私が間違っているの何このしようとしたときに、私は複数のエラーを受け取った

ループに渡されたLineItems.SubLineItemsインデックスを取得するためにとりわけ

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

を... ...?

+0

有用な回答を得る確率を最大限にするには、ここに投稿するデータとコードを簡略化して、問題のあるデータのみを残してみてください。 – MarcoS

+0

簡体字 - –

+0

代わりに、デコードされた配列値をキーに追加し続ける再帰関数を使用してみてください。 if(is_array($ process [$ key])){decode_json($ process [$ key])}。あなたが私のためにそれをコード化したいかどうか知らせてください:) – kanchan

答えて

0

私はこれを使用して、私の問題を解決:

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

は、よりよい解決策はありますか?