2015-01-09 79 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