从多维数组中保存数据

时间:2015-01-09 18:23:53

标签: php arrays

我试图将多维数组传递给数据库表和列,但是我陷入了一个我无法理解的地方,我怎样才能使用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以将数据存储在数据库中时,它只在所有列上存储名称。

用于保存数据的模型是:

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);
        }

    }

问题是如何将列值,价格,库存等传递给每一行?

感谢任何帮助!

2 个答案:

答案 0 :(得分: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循环来实现这一点。使用该计数器,您可以在同一次迭代中访问每个不同的数组(名称,价格等)。我希望它变得更加清晰。

答案 1 :(得分:0)

您的问题在于如何使用foreach功能

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

您需要执行以下操作:

foreach($option_values as $value){