PHP使用foreach循环遍历多维数组

3
我有一个多维数组,如何使用它?我想在for循环中使用每个单独的数组。
我的目标是能够将每个部分放入我的数据库中,例如 db编号0的条目->1和4 db编号1的条目->5和6 db编号2的条目->1、4、5和6
我有以下代码:
<?php 
    print_r($calculatie_id); 
    for ($i=0; $i<=3; $i++) 
{ 
?>  
<tr> 
    <td> 

    <?php 
    foreach ($calculatie_id[$i] as $value) 
    { 
        echo $value; 
    } 
?>

print_r($calculatie_id); gives 
Array ( [0] => Array ( [0] => 4 [1] => 6 ) [1] => Array ( [0] => 1 [1] => 5 ) [2] => Array ( [0] => 5 [1] => 6 ) [3] => )

但是当使用foreach时,我只得到了46。

一些额外的信息:

这个数组是由一个for循环中的多选创建的。欢迎任何其他建议。

    for ($i=0; $i<=$aantal_regels_corr; $i++)
{ 
?> 
<tr>
    <td>

        <?php 
        // maak select name
        $calculatie_id = 'calculatie_id'.$i;

        // rest van formulier
        if($error_vergeten[$i] == "ja"){ $error_omschr = $error_omschr_vergeten[$i]; include('includes/input_error.php'); } ?>&nbsp;<textarea rows="7" cols="80" name="omschrijving[]" /><?php echo $omschrijving[$i]; ?></textarea>
    </td>
    <td colspan="2">
        <select multiple="multiple" width="50" size="7" name="<?php echo $calculatie_id ?>[]" style="width: 150px">
        <?php
            $sql_calc = "select id, naam, actief from sp_calculatie WHERE (offerte_id = '".$row['off_offerte']."' OR offerte_id = '".$offerte_id."') AND actief = 'ja' ORDER BY id ASC";
            $res_calc = mysql_query($sql_calc,$con);  
            while ($row_calc = mysql_fetch_assoc($res_calc)){
        ?>
            <option value="<?php echo $row_calc["id"] ?>"><?php if (empty($row_calc["naam"])) { echo $row_calc["id"]; } else { echo $row_calc["naam"]; } ?></option>
        <?php } ?></select>
    </td>
</tr>
<?php } ?>
6个回答

7
foreach($calculatie_id as $inner_arr)
    foreach($inner_arr as $value)
        echo $value;

编辑:你应该尝试学习和理解这里发生的事情。然后,你可以对我写的代码做任何想做的事情。你说:给出14561456,我想使用$calculatie_id0=14 $calculatie_id1=56 $calculatie_id2=1456等等 那么,你将需要像这样做:

foreach($calculatie_id as $index => $inner_arr){
    echo "$calculatie_id$index = "
    foreach($inner_arr as $value)
        echo $value;
    echo "<br/>";
}

或者你可以创建你想要的那些变量(这对我来说没有任何意义):

foreach($calculatie_id as $index => $inner_arr){
    ${"calculatie_id$index"} = '';
    foreach($inner_arr as $value)
        ${"calculatie_id$index"} .= $value;
    echo ${"calculatie_id$index"}."<br/>";
}

数组([0] =>数组([0] => 1 [1] => 4)[1] =>数组([0] => 5 [1] => 6)[2] =>数组([0] => 1 [1] => 4 [2] => 5 [3] => 6)[3] =>)得到14561456我想使用 $calculatie_id0 = 14 $calculatie_id1 = 56 $calculatie_id2 = 1456 等。 - Muiter

3
基本上你拥有的是这样一个数组:
array(
 array(
  data
 )
)

你所需要的是:

以下几点:

foreach($yourArray as $innerArray)
 foreach($innerArray as $value)
  echo $value;

那将输出你想要的内容。我不太确定为什么你要先使用for()循环再使用foreach。

我已经在开头的帖子中添加了更多信息。 - Muiter

0
你可以尝试:
foreach ($calculatie_id as $key => $value) {
  echo "$calculatie_id:".$key;
  for ($i=0;$i<=count($value);$i++) {
    echo $value[$i];
  }
}

谢谢,但这是结果:数组:014数组:156数组:21456数组:3 - Muiter

0

我不明白为什么您的原始代码片段无法工作。可能是因为 $calculatie_id[3] 不是一个数组吗?

我尝试过这个:

<?php

$calculatie_id = array ( array(4,6), array(1,5), array(5,6), '' );

for ($i=0; $i<=3; $i++) 
{ 
  if(!is_array($calculatie_id[$i]))
    continue;
  echo "$i: ";
  foreach ($calculatie_id[$i] as $value) 
  { 
    echo $value; 
  } 
  echo '<br/>';
}

然后打印出:

0: 46
1: 15
2: 56


如何防止使用不存在的数组? - Muiter
@Muiter:就像我说的那样,你可以使用if(!is_array($calculatie_id[$i])) continue;来继续进行循环的下一次迭代。 - Kip

0

你需要嵌套你的foreach循环(这样你就有一个循环在另一个循环里)


0
非常感谢您迄今为止的帮助,但我尝试实现的所有示例都无法正常工作。 我已经尝试了这个脚本超过2周了。看来我一直在走错路。

我已经将我的代码放在www.pws.nl/downloads/sp_offerte_add.rar上。它肯定比我现在写的代码容易得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接