2016-04-08 4 views
1

Спасибо, что посмотрели на этот вопрос - я очень новичок в php и прочитал множество сообщений на массивах, но не могу найти ответ, который мне нужен.многомерный массив от json_decode до массива (array())

У меня есть строка 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 I ч Ава пытался:

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

среди других вещей, чтобы получить индекс LineItems.SubLineItems передаваемого в петлю ...

я получил множественные ошибки при попытке это ... то, что я делаю неправильно?

+0

В качестве предложения, чтобы максимизировать вероятность получения полезного ответа, попробуйте упростить не больше данных и кода, которые вы публикуете здесь, оставив только вопрос разумных данных ... – MarcoS

+0

Упрощенный - спасибо за отзыв. –

+0

вместо этого попробуйте использовать рекурсивную функцию, которая будет продолжать добавлять значение декодированного массива к ключу. if (is_array ($ process [$ key])) {decode_json ($ process [$ key])}. дайте мне знать, если вы хотите, чтобы я закодировал его для u :) – kanchan

ответ

0

я решил свою проблему с помощью этого:

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

Есть ли лучшее решение?

Смежные вопросы