保存多维数组中的数据
Save data from multidimensional array
我正在尝试将多维数组传递给数据库 table 和列,但我卡在了一个地方,我无法理解如何放置 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"
}
}
名称、价值、价格、库存中的每个字符串都需要保存在数据库的每一行中
但我的问题是,在创建 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);
}
}
问题是如何将值、价格、库存等列传递给每一行?
感谢任何帮助!
您的问题在于您如何使用 foreach
函数
foreach($option_values['name'] as $value){
您需要执行以下操作:
foreach($option_values as $value){
如果您遍历名称子数组,您只会得到预期的名称。对于获取行,这是您可以迭代数据结构的方式。您必须通过数字索引访问不同行中的不同值,因为它们分布在不同的数组中(而不是使用 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 可以迭代 one 数组。所以你真正想做的是同时迭代多个数组。您可以使用增加计数器的 for 循环来实现。使用该计数器,您可以在同一次迭代中访问每个不同的数组(名称、价格等)。我希望它变得更清晰了。
我正在尝试将多维数组传递给数据库 table 和列,但我卡在了一个地方,我无法理解如何放置 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"
}
}
名称、价值、价格、库存中的每个字符串都需要保存在数据库的每一行中
但我的问题是,在创建 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);
}
}
问题是如何将值、价格、库存等列传递给每一行?
感谢任何帮助!
您的问题在于您如何使用 foreach
函数
foreach($option_values['name'] as $value){
您需要执行以下操作:
foreach($option_values as $value){
如果您遍历名称子数组,您只会得到预期的名称。对于获取行,这是您可以迭代数据结构的方式。您必须通过数字索引访问不同行中的不同值,因为它们分布在不同的数组中(而不是使用 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 可以迭代 one 数组。所以你真正想做的是同时迭代多个数组。您可以使用增加计数器的 for 循环来实现。使用该计数器,您可以在同一次迭代中访问每个不同的数组(名称、价格等)。我希望它变得更清晰了。