2015-01-09 16 views
0

我試圖將一個多維數組傳遞給數據庫表和列,但即時通訊卡陷入了一個我無法理解的地方,我怎麼才能讓foreach函數得到正確的結果。保存來自多維數組的數據

我下面的數據:

數據:

array(5) { 
     ["option_id"]=> int(115) 

    ["name"]=> 
      array(3) { 
      [0]=> string(1) "S" 
      [1]=> string(1) "M" 
      [2]=> string(1) "L" 
      } 
    ["value"]=> array(3) { 
      [0]=> string(5) "12345" 
      [1]=> string(5) "12346" 
      [2]=> string(5) "12347" 
     } 
    ["price"]=> array(3) { 
      [0]=> string(3) "199" 
      [1]=> string(3) "199" 
      [2]=> string(3) "199" 
     } 
    ["inventory"]=> array(3) { 
    [0]=> string(1) "1" 
    [1]=> string(1) "1" 
    [2]=> string(1) "1" 
    } 
} 

從名稱,價值,價格,庫存需要每串要保存每一行中的數據庫 data from database

但我的問題是在創建將數據存儲在數據庫中的foreach時,它只存儲所有列上的名稱。

使用保存數據的模型IM是:

function saveBatchOptionsValues($option_values){ 
     $sequence = 0; 
     foreach($option_values['name'] as $value){ 

      $values['option_id'] = $option_values['option_id']; 
      $values['name'] = $value['name']; 
      $values['value'] = $value['value']; 
      $values['sequence'] = $sequence; 
      $values['inventory'] = $value['inventory']; 
      $values['weight'] = floatval(1.00); 
      $values['price']  = floatval($value['price']); 
      $sequence++; 
      $this->db->insert('option_values', $values); 
     } 

    } 

的問題是如何傳遞的列值,價格,庫存等。每一行?

任何幫助表示讚賞!

+0

這看起來應該可能有一個codeigniter標記 – Ding 2015-01-09 18:26:03

回答

1

如果您遍歷名稱子陣列你纔會得到名字如預期。爲了獲得行,這是如何迭代你的數據結構。你必須通過一個數字索引來訪問來自不同行不同的值,因爲它們分佈在不同的陣列(而不是用foreach迭代的):

function saveBatchOptionsValues($option_values){ 
    $count = count($option_values["name"]); 
    for($i = 0; $i < $count; $i++) { 
     $values['option_id'] = $option_values['option_id']; 
     $values['name'] = $option_values['name'][$i]; 
     $values['value'] = $option_values['value'][$i]; 
     $values['sequence'] = $i; 
     $values['inventory'] = $option_values['inventory'][$i]; 
     $values['weight'] = floatval(1.00); 
     $values['price'] = floatval($option_values['price'])[$i]; 
     $this->db->insert('option_values', $values); 
    } 
} 

簡要說明

我已經改變了適合你的例子。你有陣列的數組嗎?在子陣列中是相同類型的數據,例如名。所以所有的名字都存儲在同一個數組中。如果你迭代精確的子數組會發生什麼?在每次迭代中,您都會檢索名稱。所以如果你是例如在第二次迭代中,您檢索名稱。但是現在你也想要爲這個確切的名字/產品定價。這不可能通過使用foreach循環,因爲使用foreach,你可以遍歷一個一個數組。所以你真正想做的是同時迭代多個數組。你可以用一個for循環來實現這一點,其中計數器增加。使用該計數器,您可以在同一次迭代中訪問每個不同的數組(名稱,價格等)。我希望它變得更清楚一點。

+0

mmm。不清楚:( – Dario 2015-01-09 18:38:52

+0

就是這樣,它做的工作:) – Dario 2015-01-09 18:45:30

+0

沒問題。爲了更好的理解,我添加了一個解釋。也許你更好地理解這種方式。 – Guillermo 2015-01-09 18:46:07

0

你的問題是你如何使用foreach功能

foreach($option_values['name'] as $value){ 

你需要做的是這樣的:

foreach($option_values as $value){ 
+0

正確,但它會得到數組值的名稱,值,價格和庫存,所以在這種情況下將是有用的codeigniter db的insert_batch函數? – Dario 2015-01-09 18:30:54

+0

這不會幫助他將他的數據作爲行。他希望名稱(0)與價格(0)和庫存(0)等一起 – Guillermo 2015-01-09 18:34:05