我试图将多维数组传递给数据库表和列,但是我陷入了一个我无法理解的地方,我怎样才能使用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);
}
}
问题是如何将列值,价格,库存等传递给每一行?
感谢任何帮助!
答案 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){