Foreach for Multidimensional Array

时间:2013-10-23 17:11:45

标签: php arrays multidimensional-array foreach

我想知道如何遍历多维数组,这里是我的代码和我在这里想要实现的一些解释

我的数组: -

$new_info = array(
"Serial_Numbers" => array(101, 102, 103, 104),
"Costs" => array(10, 9, 8, 8)
);

我想要的是通过使用当前设置的键来获取数组1和数组2的值,如上面的代码中所示,“Serial_Numbers”和“Costs”。这可能听起来有点令人困惑,所以让我展示一下我计划用这些数组得到的值: -

 $con=mysqli_connect("localhost","root","root","saved_new");
 // Check connection
 if (mysqli_connect_errno())
 {
 echo "Failed to connect, error is: " . mysqli_connect_error();
 }
$new_info = array(
"Serial_Numbers" => array(101, 102, 103, 104),
"Costs" => array(10, 9, 8, 8)
);
 foreach ($new_info as $insert_info) {
 $sql="INSERT INTO new_table (serial_no, cost)
 VALUES
 ('$insert_info['Serial_Numbers'], $insert_info['Costs']')";
 if (!mysqli_query($con,$sql))
 {
 die('Error: ' . mysqli_error($con));
 }
 echo "All records added" . "<br />";
 }
 mysqli_close($con);
 ?> 

让我再次总结一下,以便更好地理解;我想将名为'Serial_Numbers'的数组中的所有值添加到名为'serial_numbers'的列中的数据库中,并将数组中名为'Costs'的所有值添加到我的数据库中名为'costs'的列中,以及我想要的原因喜欢使用foreach循环实现这一点,我希望它同时通过这两个数组并继续运行,直到它耗尽值,这样,我可以根据数据库更新数据库中的信息正确的序列号和它的成本。

希望现在有意义,如果您希望我添加任何其他内容,请告诉我。

3 个答案:

答案 0 :(得分:3)

您需要并行循环遍历两个子数组,而不是使用嵌套循环,因此您可以将所有相应的元素作为对,而不是交叉产品。

foreach ($new_info['Serial_Numbers'] as $i => $serial) {
    $cost = $new_info['Costs'][$i];
    $sql = "INSERT INTO new_table (serial_no, cost) VALUES ('$serial', $cost)";
    ...
}

如果重新组织数据结构以将相关元素保持在一起会更好:

$new_info = array(array('Serial_Number' => 101, 'Cost' => 10),
                  array('Serial_Number' => 102, 'Cost' => 9),
                  array('Serial_Number' => 103, 'Cost' => 8),
                  array('Serial_Number' => 104, 'Cost' => 8));

这似乎是你在循环中所期待的。

答案 1 :(得分:1)

试试这个:

for ( $i = 0; $i <= count($new_info['Serial_Numbers']); $i++ )
{
   echo $new_info['Serial_Numbers'][$i].'<br />';
   echo $new_info['Costs'][$i];
}

这将计算子阵列中的条目数量,然后您可以通过$ i访问每个索引。

答案 2 :(得分:0)

如果您的序列号是唯一的,那么您可以像这样使用普通数组。

$new_info = array(101=>10,102=>9,103=>8,104=>9);
foreach($new_info as $serial_number => $cost) {
}

如果序列号不是唯一的,那么请使用Barmar建议的方法。