2017-06-22 202 views
1

我試圖插入數據到json中的數據庫,其中多個select有多個選項標籤和值。只要我想要插入到數據庫這樣的: -如何在foreach數組中使用foreach?

First select dropdown:- 

{"select":[{"placeholder":"test","options": 
[{"label":"option-label-1","value":"option-value-1"}, 
    {"label":"option-label-2","value":"option-value-2"}, 
    {"label":"option-label-3","value":"option-value-3"}, 
    {"label":"option-label-4","value":"option-value-4"}], 
"type":"select","name":"test","label":"test"}, 

Second select dropdown:- 

{"placeholder":"test2","options": 
[{"label":"option-label-1","value":"option-value-1"}, 
{"label":"option-label-2","value":"option-value-2"}, 
{"label":"option-label-3","value":"option-value-3"}, 
{"label":"option-label-4","value":"option-value-4"}], 
"type":"select","name":"test2","label":"test2"}]} 

但我的代碼顯示錯誤,而插入

Parse error: syntax error, unexpected 'foreach' (T_FOREACH), expecting ']' 

我的代碼來獲得結果是

publicfunction dropDownField($request) 
{ 
    $value = []; 
    if (key_exists("drop-name", $request)) { 
     foreach ($request['drop-name'] as $key => $data) { 
      $value[] = [ 
       "type"  => ($request['drop-type'][$key]) ? (($request['drop-type'][$key])) : null, 
       "label"  => ($request['drop-label'][$key]) ? ($request['drop-label'][$key]) : null, 
       "name"  => ($request['drop-name'][$key]) ? ($request['drop-name'][$key]) : null, 
       "placeholder" => ($request['drop-placeholder'][$key]) ? ($request['drop-placeholder'][$key]) : null, 
        foreach ($request['drop-option-label'] as $index => $data) { 
         "options"  => [ 
          'label' => ($request['drop-option-label'][$key][$index]) ? ($request['drop-option-label'][$key][$index]) : null, 
          'value' => ($request['drop-option-value'][$key][$index]) ? ($request['drop-option-value'][$key][$index]) : null, 
         ] 
        } 
      ]; 
     } 
    } 

    return $value; 
} 
+3

你不能用'的foreach 'array'裏面' –

+0

好我的問題是由於foreach內數組。那麼,我該如何在數組中實現foreach。無論如何去做。 –

+0

使用'foreach'生成第二個數組,然後將其放入第一個數組,然後將其放入您想要的數組中。 – CD001

回答

3

試試這個代碼:

public function dropDownField($request) 
{ 
    $value = []; 
    if (key_exists("drop-name", $request)) { 
     foreach ($request['drop-name'] as $key => $data) { 
      $options = []; 
      foreach($request['drop-option-label'] as $key => $data) { 
       $options[] = [ 
        'label' => ($request['drop-option-label'][$key]) ?($request['drop-option-label'][$key]) : null, 
        'value' => ($request['drop-option-value'][$key]) ? ($request['drop-option-value'][$key]) : null, 
       ]; 
      } 

      $value[] = [ 
       "type"  => ($request['drop-type'][$key]) ? (($request['drop-type'][$key])) : null, 
       "label"  => ($request['drop-label'][$key]) ? ($request['drop-label'][$key]) : null, 
       "name"  => ($request['drop-name'][$key]) ? ($request['drop-name'][$key]) : null, 
       "placeholder" => ($request['drop-placeholder'][$key]) ? ($request['drop-placeholder'][$key]) : null, 
       "options" => $options 
      ]; 
     } 
    } 
    return $value; 
} 
+0

感謝您的回答@rya。我會嘗試 –

+1

哦,最後它是工作。 –

+0

在這裏,'$ key'被覆蓋!! –

2

它可以是這樣的這個:

public function dropDownField($request) 
{ 
    $value = []; 

    if (key_exists("drop-name", $request)) { 
     foreach ($request['drop-name'] as $key => $data) { 

     /* Defined $var here for option */ 
     foreach ($request['drop-option-label'] as $index => $data) { 
      $var = [ 
       'label' => !empty($request['drop-option-label'][$index]) ? $request['drop-option-label'][$index] : null, 
       'value' => !empty($request['drop-option-value'][$index]) ? $request['drop-option-value'][$index] : null, 
       ]; 
     } 


    $value[] = [ 
       "type"  => !empty($request['drop-type'][$key]) ? $request['drop-type'][$key] : null, 
       "label"  => !empty($request['drop-label'][$key]) ? $request['drop-label'][$key] : null, 
       "name"  => !empty($request['drop-name'][$key]) ? $request['drop-name'][$key] : null, 
       "placeholder" => !empty($request['drop-placeholder'][$key]) ? $request['drop-placeholder'][$key] : null, 
       "options"  => $var; //Defined outside foreach loop 
      ]; 
     } 
    } 

    return $value; 
} 
+0

謝謝@Shaunak它在這一行顯示未定義的索引$ request ['drop-option-label'] [$ key] [$ index] –

+0

我們需要在轉換器中添加'!empty'來檢查值。 –

4

你只需要創建循環內另一個數組,你要去,然後將其添加到您的原數組在需要的地方:

publicfunction dropDownField($request) 
{ 
    $value = []; 
    if (key_exists("drop-name", $request)) { 
     foreach ($request['drop-name'] as $key => $data) { 

      // new "options" array 
      $options = []; 
      foreach($request['drop-option-label'] as $index => $data) { 
       $options[] = [ 
        'label' => $data ?: null, 
        'value' => !empty($request['drop-option-value'][$index]) ? $request['drop-option-value'][$index] : null, 
       ]; 
      } 

      // original "return" array 
      $value[] = [ 
       "type"  => !empty($request['drop-type'][$key]) ? $request['drop-type'][$key] : null, 
       "label"  => !empty($request['drop-label'][$key]) ? $request['drop-label'][$key] : null, 
       "name"  => !empty($request['drop-name'][$key]) ? $request['drop-name'][$key] : null, 
       "placeholder" => !empty($request['drop-placeholder'][$key]) ? $request['drop-placeholder'][$key] : null, 
       "options"  => $options // <-- new "options" array added here 
      ]; 
     } 
    } 

    return $value; 
} 
+0

謝謝你的答案,但它仍然有問題。 –

+0

@PawanDongol ...你能更具體一點嗎? – CD001

+0

ok我的問題顯示錯誤undefined index offset 0在這行'label'=>($ request ['drop-option-label'] [$ key] [$ index])? ($ request ['drop-option-label'] [$ key] [$ index]):null –