Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多维数组的Foreach_Php_Arrays_Multidimensional Array_Foreach - Fatal编程技术网

Php 多维数组的Foreach

Php 多维数组的Foreach,php,arrays,multidimensional-array,foreach,Php,Arrays,Multidimensional Array,Foreach,我想知道如何在多维数组中循环,下面是我的代码和一些关于我在这里尝试实现的解释 我的阵列:- $new_info = array( "Serial_Numbers" => array(101, 102, 103, 104), "Costs" => array(10, 9, 8, 8) ); 我想要的是通过使用数组1和数组2的键来获取数组1和数组2的值,正如您在上面的代码中所看到的,当前设置为“Serial_number”和“Costs”。这听起来可能有点混乱,所以让我展示一下我打算如

我想知道如何在多维数组中循环,下面是我的代码和一些关于我在这里尝试实现的解释

我的阵列:-

$new_info = array(
"Serial_Numbers" => array(101, 102, 103, 104),
"Costs" => array(10, 9, 8, 8)
);
我想要的是通过使用数组1和数组2的键来获取数组1和数组2的值,正如您在上面的代码中所看到的,当前设置为“Serial_number”和“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);
 ?> 
$con=mysqli\u connect(“localhost”、“root”、“root”、“saved\u new”);
//检查连接
if(mysqli\u connect\u errno())
{
echo“连接失败,错误为:”.mysqli_connect_error();
}
$new_info=数组(
“序列号”=>数组(101、102、103、104),
“成本”=>数组(10,9,8,8)
);
foreach($insert\U info为$new\U info){
$sql=“插入新表格(序列号,成本)
价值观
(“$insert_info[‘序列号’],$insert_info[‘成本’])”;
如果(!mysqli_query($con,$sql))
{
die('Error:'.mysqli_Error($con));
}
回显“已添加所有记录”。
; } mysqli_close($con); ?>
让我再总结一下,以便更好地理解;我想将名为“Serial_Numbers”的数组中的所有值添加到名为“Serial_Numbers”的列中的数据库中,并将名为“Costs”的数组中的所有值添加到我的数据库中名为“Costs”的列中。我想使用foreach循环来实现这一点的原因是,我希望它同时通过这两个数组时间,直到它用完为止,这样,我可以根据正确的序列号和成本在数据库中更新信息


希望它现在有意义,请让我知道您是否希望我添加任何其他内容。

您需要并行地在两个子数组上循环,而不是使用嵌套循环,因此您可以将所有对应的元素作为对,而不是叉积

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

这似乎是您在循环中所期望的。

您需要并行地在两个子数组上循环,而不是使用嵌套循环,因此您可以将所有对应的元素作为成对元素,而不是叉积

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));
这似乎是您在循环中所期望的。

尝试以下方法:

for ( $i = 0; $i <= count($new_info['Serial_Numbers']); $i++ )
{
   echo $new_info['Serial_Numbers'][$i].'<br />';
   echo $new_info['Costs'][$i];
}
对于($i=0;$i请尝试以下操作:

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

for($i=0;$i如果序列号是唯一的,那么可以像这样使用普通数组

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

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

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

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

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

我不理解您对当前foreach循环的解释。您在那里只有一个
foreach
循环。@putvande删除了它,因为它与此无关,希望现在它更有意义。谢谢!您想添加逗号分隔的数组“序列号”在数据库中,或者您想对其执行什么操作?您现在使用它的方式必须给出一个错误。
$serialToCosts=array\u combine($new\u info['Serial\u number'],$new\u info['Costs']);foreach($serialToCosts as$cSerialNumber=>$cCost){……}
我假设数据库中的行应该看起来像
序列号、成本
例如
101、10
。我还想指出,除非您在插入前检查值是否为整数,否则您的代码是可注入的。我不理解您对当前价格的解释ch循环。您只有一个
foreach
循环。@putvande删除了它,因为它与此无关,希望它现在更有意义。谢谢!您想在数据库中添加以逗号分隔的数组“序列号”,还是想用它做什么?您现在使用它的方式必须给出一个错误。
$serialToCosts=array\u combine($new\u info['Serial_number'],$new_info['Costs'];foreach($cSerialNumber=>$cCost){……}
我假设数据库中的行应该看起来像
序列号、成本
例如
101、10
。我还想指出,除非您在插入它们之前检查值是否为整数,否则您的代码是可注入的。如果您不介意,我想尝试理解您的代码,以便知道它是如何工作的。你介意解释一下$new_info['Costs'][$i]是如何与它旁边的[$i]一起工作的,而不是没有它吗?
$new_info['Costs']
是一个数组。如果你想访问其中的一个元素,你需要提供一个索引。如果你不介意的话,我想试着理解你的代码,这样我就知道它是如何工作的。你介意解释一下$new\u info['Costs'][$I]是如何使用它旁边的[$I]而不是没有它的吗?
$new\u info['Costs']
是一个数组。如果要访问其中的元素,需要提供索引。