PHP foreach循环中的多个索引变量

38

在 PHP 中,是否可以使用多个“索引”变量进行 foreach 循环,类似于以下示例(它不使用正确的语法)?

foreach ($courses as $course, $sections as $section)

如果不行,有没有好的方法可以达到相同的效果?


你可能需要澄清一下。你是想循环遍历一个二维数组还是两个数组? - Jere
1
不确定这会怎么工作?你能再解释一下你在做什么吗?你可以使用嵌套的foreach或在迭代之前合并数组。让我们知道你想要做什么,我们可以帮助你完成它。 - Andy Groff
8个回答

56

为了达到这样的结果,你可以这样做

foreach (array_combine($courses, $sections) as $course => $section)

但这只适用于两个数组


4
注意:如果$courses是数字字符串,它们将被转换为整数。 - hakre
希望我没有唤起一个太久远的主题。但是,我正在尝试实现同样的事情,我曾经做到了一秒钟,但我认为它没有起作用,但它确实起作用了,但我无论如何都记不起我放入的代码。我正在尝试将类别和值输入数据库。foreach($_POST['category'] as $i => $category) { // 从post中获取值。 $category = mysql_real_escape_string($category); $value = mysql_real_escape_string($_POST['value'][$i]); - Nomad
如果两个数组具有不同的值,会发生什么? - TarangP

18

如果两个数组大小相同,您可以使用for循环:

for($i=0, $count = count($courses);$i<$count;$i++) {
 $course  = $courses[$i];
 $section = $sections[$i];
}

9

TRY -

1)

<?php
$FirstArray = array('a', 'b', 'c', 'd');
$SecondArray = array('1', '2', '3', '4');

foreach($FirstArray as $index => $value) {
    echo $FirstArray[$index].$SecondArray[$index];
    echo "<br/>";
}
?>

或者2)
<?php
$FirstArray = array('a', 'b', 'c', 'd');
$SecondArray = array('1', '2', '3', '4');

for ($index = 0 ; $index < count($FirstArray); $index ++) {
  echo $FirstArray[$index] . $SecondArray[$index];
  echo "<br/>";
}
?>

8
你需要像这样使用嵌套循环:

您需要像这样使用嵌套循环:

foreach($courses as $course)
{
    foreach($sections as $section)
    {
    }
}

当然,这将针对每门课程循环遍历每个部分。
如果您想查看每个pair,最好使用包含课程/部分pair的对象并循环遍历它们,或者确保索引相同并执行:
foreach($courses as $key => $course)
{
    $section = $sections[$key];
}

我在WordPress中成功地使用了接受的答案和上面的$courses as $key => $course答案。区别在于,接受的答案仅限于两个自定义字段,而这个答案允许任意数量的字段,因此更加灵活。 - edwinbradford

4
不行,因为那些数组可能有不同数量的项。
你必须明确地写出类似以下的内容:
for ($i = 0; $i < count($courses) && $i < count($sections); ++$i) {
    $course = $courses[$i];
    $section = $sections[$i];

    //here the code you wanted before
}

1
预先执行您的“$i < count(...”代码并将其存储在变量中,以便它不会在for循环的每次迭代中执行。对于大型数组来说,这是显着的节省。 - zzzzBov
1
我处理非常大的项目,它们在高负载下运行,通常这并不重要,因为单个SQL查询比php计数慢1000倍 : )。如果你必须处理非常大的数组,那么应用程序设计肯定有问题。 - Daimon
在参数内使用Count会导致非常昂贵的事务。 - Samuel Ramzan

3
不,这可能是PHP数组指针有用的罕见案例之一:
reset($sections);
foreach ($courses as $course)
{
 list($section) = each($sections);
}

2

具体来说,这会产生什么影响?$courses$sections 只是两个分开的数组,你希望对它们的值执行相同的函数吗?你可以尝试以下代码:

foreach(array_merge($courses, $sections) as $thing) { ... }

当然,这里做出了有关array_merge的所有通常假设。

还是说$sections来自于$course,你想对每个课程中的每个章节都做些什么?

foreach($courses as $course) {
    foreach($sections as $section) {
        // Here ya go
    }
}

0

像这样吗?

foreach($array as $b=>$c){

}

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