2017-02-08 8 views
2

У меня есть массив, полученный от android, который должен быть вставлен в таблицу mysql с полями пользователя, продукта, примечания, цвета, размера, количества. Im не в состоянии получить значение данных внутренних петель, содержащих размер и count.It показывает ошибкеПолучить значения массива с помощью цикла foreach

$dat='[{"user":10, 
     "product":58, 
     "remarks":"ok", 
     "details":[{ 
       "color":"Red", 
       "data":[{ 
         "size":12, 
         "count":1 
        }, 
        { 
         "size":14, 
         "count":2 
        }] 
     }] 
    }, 
    {"user":10, 
    "product":60, 
    "remarks":"okk", 
    "details":[{ 
       "color":"Black", 
       "data":[{ 
        "size":10, 
        "count":5 
        }, 

       ]},{ 
      "color":"Red", 
      "data":[{ 
        "size":10, 
        "count":3 
        }, 

       ]} 
     ]} 
]'; 

Это код, я пробовал.

$s = json_decode($dat, true); 
print_r($s); 


foreach($s as $item) 
{ 
    foreach($item as $details) { 
     foreach($details as $data) { 

       echo "user".$item['user']; 
       echo "product".$item['product']; 
       echo "remarks".$item['remarks']; 
       echo "color".$details['color']; 
       echo "size".$data['size']; 
       echo "count".$data['count']; 


     } 
    } 
} 

Это выход print_r($s)

Array(
     [0] => Array (
       [user] => 10 
       [product] => 58 
       [remarks] => ok 
       [details] => Array (
          [0] => Array(
             [color] => Red 
             [data] => Array ( 
               [0] => Array (
                [size] => 12 
                [count] => 1 
                 ) 
               [1] => Array (
                [size] => 14 
                [count] => 2 
                 ) 
               ) 
            ) 
          ) 
       ) 
     [1] => Array (
       [user] => 10 
       [product] => 60 
       [remarks] => okk 
       [details] => Array ( 
           [0] => Array (
             [color] => Black 
             [data] => Array( 
                [0] => Array ( 
                 [size] => 10 
                 [count] => 5 
                  ) 
                        ) 
             ) 
           [1] => Array( 
             [color] => Red 
             [data] => Array ( 
                [0] => Array( 
                 [size] => 10 
                 [count] => 3 
                  ) 
                        ) 
             ) 
           ) 
       ) 
     ) ; 

Pls помощь me.thanks заранее

+0

Что такое вывод 'print_r ($ s)'? – KhorneHoly

+1

У ваших данных JSON есть некоторые проблемы, исправить их в первую очередь, используйте http://json.parser.online.fr/ –

ответ

2
foreach($s as $item) 
{ 
      echo "user".$item['user']; 
      echo "product".$item['product']; 
      echo "remarks".$item['remarks']; 
      foreach($item['details'] as $detail) 
      { 
       echo "color".$detail['color']; 
       foreach($detail['data'] as $data) 
       { 
        echo "size".$data['size']; 
        echo "count".$data['count']; 
       } 
      } 
} 

И ваш JSON получить 2 commat, вы должны удалить их

"details":[{ 
      "color":"Black", 
      "data":[{ 
       "size":10, 
       "count":5 
       } <--- 

      ]},{ 
     "color":"Red", 
     "data":[{ 
       "size":10, 
       "count":3 
       } <--- 

      ]} 
+0

извините..и не получилось – coder

+0

Я его отредактировал нормально сейчас – MacBooc

+0

Да ... я получил его .. спасибо :) – coder

2

попробуйте заменить следующая строка в ответ MacBooc в:

foreach($item['detail'] as $detail) 

с этим:

foreach($item['details'] as $detail) 
+1

upvote для моей ошибки;) – MacBooc

+0

@MacBooc Да..true :) – coder

+0

@MacBooc Спасибо :) – jetblack

1

Посмотрите, как что у вас есть многомерный массив, который заставит вас запутать в вставки данных в таблицу MySQL.

Чтобы справиться с этой проблемой, вы должны сделать массив двумерным массивом, чтобы вы могли легко вставлять данные в БД.

Для этого вы должны использовать эту функцию, чтобы сделать массив двумерный: -

function array_flatten($array) { 
    if (!is_array($array)) { 
     return FALSE; 
    } 
    $result = array(); 
    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $result =$result+$this->array_flatten($value); 
     } 
     else { 
      $result[$key] = $value; 
     } 
    } 

    return $result; 
} 

Здесь вы должны использовать только один цикл Еогеаспа для этого

Так же, как это: -

$data=['size'=>22,'count'=>3]; 
    $details=['size'=>23,'color'=>'red','data'=>$data]; 
    $s []= ['user'=>'10','product'=>58,'details'=>$details]; 
    $s []= ['user'=>'10','product'=>58,'details'=>$details]; 
    $data=''; 
    foreach($s as $item) 
    { 
    $data[]=$this->array_flatten($item); 
    } 
    dd($s,$data); 

Здесь я создаю массив, например, в том месте, где вы должны передать свой массив в цикл foreach.

Теперь он дает выход в

enter image description here

Теперь вы можете легко вставить данные в БД для вас.

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