PHP foreach循环嵌套在彼此之内

时间:2014-07-25 10:00:27

标签: php arrays loops foreach

我有三个数组如下:

$names = array ("Josh", "Dami");
$details = array ("Douglas", "Port Erin");
$images = array ("1", "2");

然后我有以下foreach循环将值互相放入它自己的文本字段

<?php foreach($names as $a_name) { ?>
  <tr>
  <td><input type="text" size="10"  name="names[]"   value="<?php  echo $a_name ?>" ></td>
  <td><input type="text" size="10"  name="details[]"   value="<?php  echo $a_detail ?>" ></td>
  <td><input type="text" size="10"  name="images[]"   value="<?php  echo $a_image ?>" ></td>
  <td><?php echo $add_row_icon; echo (' '); echo $remove_row_icon;?></td>
  </tr> <?php  
}?>

显然,只运行names数组并将它们放入正确的字段中。我将如何嵌套另外两个foreach循环,以便显示名称,细节和图像?

4 个答案:

答案 0 :(得分:2)

试试这个:

<?php foreach($names as $key => $a_name) { ?>
    <tr><td><input type="text" size="10"  name="details[]"   value="<?php  echo $details[$key] ?>" ></td><tr>
<?php } ?>

代码仅用于细节,对其他人也使用相同的东西。

答案 1 :(得分:1)

$names = array ("Josh", "Dami");
$details = array ("Douglas", "Port Erin");
$images = array ("1", "2");

// get the smallest of the arrays
$size = min(count($names), count($details), count($images));

<?php for ($i=0; $i<$size; $i++) { ?>
<tr>
  <td><input type="text" size="10" name="names[]" value="<?php echo $names[$i]; ?>" ></td>
  <td><input type="text" size="10" name="details[]" value="<?php echo $details[$i]; ?>" ></td>
  <td><input type="text" size="10" name="images[]" value="<?php echo $images[$i]; ?>" ></td>
  <td><?php echo $add_row_icon; echo (' '); echo $remove_row_icon; ?></td>
</tr> 
<?php } ?>

答案 2 :(得分:0)

$names = array ("Josh", "Dami");
$details = array ("Douglas", "Port Erin");
$images = array ("1", "2");

<?php for ($i=0; $i<sizeof($names); $i++) { ?>
  <tr>
  <td><input type="text" size="10"  name="names[]"   value="<?php  echo $names[$i] ?>" ></td>
  <td><input type="text" size="10"  name="details[]"   value="<?php  echo $details[$i] ?>" ></td>
  <td><input type="text" size="10"  name="images[]"   value="<?php  echo $images[$i] ?>" ></td>
  <td><?php echo $add_row_icon; echo (' '); echo $remove_row_icon;?></td>
  </tr> <?php  
}?>

答案 3 :(得分:-1)

你应该在你的问题中使用foreach循环 - 你只是忘记循环检索索引键,因此:

<?php foreach ($names as $key => $a_name) { ?>
  <tr>
  <td><input type="text" size="10"  name="names[]"   value="<?php  echo $a_name ?>" ></td>
  <td><input type="text" size="10"  name="details[]"   value="<?php  echo $details[$key] ?>" ></td>
  <td><input type="text" size="10"  name="images[]"   value="<?php  echo $images[$key] ?>" ></td>
  <td><?php echo $add_row_icon; echo (' '); echo $remove_row_icon;?></td>
  </tr> <?php  
} ?>

但说实话,我考虑将这些多个数组更改为一个多维数组,如下所示:

$users = array(
    array(
        'name' => 'Josh',
        'detail' => 'Douglas',
        'image' => '1',
    ),
    array(
        'name' => 'Dami',
        'detail' => 'Port Erin',
        'image' => '2',
    ),
);

另外,不要依赖names[]details[]以正确的顺序发送(可能会发生值可以交换)因此尽可能使用索引。现在你需要做的是:

<?php foreach ($users as $i => $user) { ?>
<tr>
    <td><input type="text" size="10" name="names[<?php echo $i ?>]" value="<?php echo $user['name'] ?>" ></td>
    <td><input type="text" size="10" name="details[<?php echo $i ?>]" value="<?php echo $user['detail'] ?>" ></td>
    <td><input type="text" size="10" name="images[<?php echo $i ?>]" value="<?php echo $user['image'] ?>" ></td>
    <td><?php echo "{$add_row_icon} {$remove_row_icon}" ?></td>
</tr>
<?php } ?>