猿问

PHP 的 foreach 和 for 之间的迭代差异

我可以使用 foreach 遍历 PHP 数组,但不能使用 for 循环:


这不起作用:


for($j = 0; $j < sizeof($jobsFilterA); $j++) {

    echo $j . $jobsFilterA[$j] . "<br>";

}

这样做:


foreach($jobsFilterA as $job) {

    echo $job . "<br>";

}

我有 5 个不同的数组,其中一些只是从数据库提取中构建的,其他的构建然后通过删除特定索引进行修剪。


感觉由于使用了 unset 函数,我刚刚得到了空索引,因为我已经全部输入了。


我可以删除未设置的索引或者重建数组的正确方法是什么?


提前致谢!


尝试以不同的方式迭代多个不同的数组。


代码在上面。


for 循环中的未设置索引会引发未定义的偏移异常/错误。


最后,这5个数组需要回显成一个表。我一直通过这样的 for 循环来做到这一点:


/*

*                   Echo data into a table

*/

echo '<tbody>';

for($i=0; $i < sizeof($jobsFilterA); $i++){

    echo "<tr><td>" . strtoupper(substr($custLastNames[$i], 0, 4)) . "</td>";

    echo "<td width='100'>" . $jobsFilterA[$i] . "</td>";

    echo "<td>" . $waxDueDates[$i] . "</td>";

    echo "<td>" . $dayDifferences[$i] . "</td>";

    echo "<td>" . $revisedETAs[$i] . "</td></tr>";

}

echo '</tbody>'

这就是为什么我希望我可以重新组织数组,以便它们的数据以对齐/连续性索引。


心有法竹
浏览 159回答 1
1回答

一只斗牛犬

如果您unset在数字序列上使用过(除非取消设置最后一个索引),那么for它将失败,因为您将访问一个不再存在的键(并且会收到警告)。例如,如果您有一个数组['a', 'b', 'c', 'd']并且您取消设置 index&nbsp;2,您最终会得到[0 => 'a', 1 => 'b', 3 => 'd'],但您的for循环不知道这一点,因此您的代码仍然会检查$jobsFilterA[2]when&nbsp;$jis&nbsp;2。如果您真的想使用 a&nbsp;for,您可以使用 eg 重置密钥array_values,这将为[0 => 'a', 1 => 'b', 2 => 'd']您提供现有的密钥for。如果您只想检查$jobsFilterA其他数组中的相同索引,另一种选择是使用,foreach($jobsFilterA as $i => $job)然后您可以访问例如$waxDueDates[$i]where$i与$jobsFilterA.&nbsp;还有其他各种方法可以做到这一点。
随时随地看视频慕课网APP
我要回答