相互嵌套的PHP foreach循环
我有三个数组,如下所示:相互嵌套的PHP foreach循环,php,arrays,loops,foreach,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="1
$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循环,以便显示名称、详细信息和图像?试试以下方法:
<?php foreach($names as $key => $a_name) { ?>
<tr><td><input type="text" size="10" name="details[]" value="<?php echo $details[$key] ?>" ></td><tr>
<?php } ?>
代码仅用于详细信息,其他代码也可以使用相同的代码。您应该像您的问题中那样使用foreach循环-您只是忘记了循环检索索引键,因此:
$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
}?>
<?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
} ?>
另外,不要依赖名称[]和详细信息[]以正确的顺序发送。可能会发生值交换,因此在可能的情况下使用索引。现在您需要做的是:
<?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 } ?>
当你发布答案的时候,我就明白了,谢谢-1用于for循环和for循环内部的sizeof。虽然对于这样小的数组,它可能与foreach没有什么不同,但对于较大的数组,性能会有所不同。我建议使用此代码,因为它使用的foreach比loop更快。foreach与数组一起使用,不能保证键同步,是危险的,-1用于使用for循环和sizeof方法,即使该方法并不常见,并且是count的别名。虽然对于这样小的数组,它可能与foreach没有什么不同,但对于较大的数组,性能会有所不同。将sizeof替换为count,因为这是我们应该使用的函数。我认为这里的for循环是合适的,因为我们可以轻松地一次循环三个数组。请注意,在进入for循环之前,我确实首先创建了$size。在每次迭代中运行count是for循环通常比foreach更昂贵的原因。本例并非如此。好的,-1缩回。但是对于循环,即使使用count outside,也比foreach稍微贵一点……我建议使用并接受@PrasanthBendra.-1的答案,以便在数组上使用foreach$key=>$value,这些数组不能保证是键-synchronous@EugenRieck顺便提一下这也是为什么我建议创建一个多维数组而不是使用三个数组的原因,所以你的否决票只能证明我之前的陈述。
$users = array(
array(
'name' => 'Josh',
'detail' => 'Douglas',
'image' => '1',
),
array(
'name' => 'Dami',
'detail' => 'Port Erin',
'image' => '2',
),
);
<?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 } ?>