Несколько индексных переменных в цикле PHP для каждого


Возможно ли иметь цикл foreach в PHP с несколькими переменными "индекса", похожий на следующий (который не использует правильный синтаксис)?

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

Если нет, то есть ли хороший способ добиться того же результата?

Author: Donald Taylor, 2010-11-11

8 answers

Чтобы достичь именно такого результата, вы могли бы сделать

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

Но это работает только для двух массивов

 44
Author: Will, 2010-11-11 18:20:41

Если оба массива имеют одинаковый размер, вы можете использовать цикл for как:

for($i=0, $count = count($courses);$i<$count;$i++) {
 $course  = $courses[$i];
 $section = $sections[$i];
}
 13
Author: codaddict, 2012-07-20 21:27:32

Вам нужно будет использовать вложенные циклы следующим образом:

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

Конечно, это будет повторяться по каждому разделу для каждого курса.

Если вы хотите просмотреть каждую пару, вам лучше использовать либо объекты, содержащие пары курс/раздел, и зацикливаться на них, либо убедиться, что индексы одинаковы, и выполнить:

foreach($courses as $key => $course)
{
    $section = $sections[$key];
}
 6
Author: Alan Geleynse, 2010-11-11 18:20:22

ПОПРОБУЙТЕ -

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/>";
}
?>
 3
Author: solution fix, 2013-03-28 09:04:13

Нет, потому что в этих массивах может быть другое количество элементов.

Вы должны явно написать что-то вроде этого:

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

    //here the code you wanted before
}
 2
Author: Daimon, 2010-11-11 18:21:29

Нет, это, возможно, один из редких случаев, когда курсоры массива PHP полезны:

reset($sections);
foreach ($courses as $course)
{
 list($section) = each($sections);
}
 2
Author: AndreKR, 2010-11-11 18:22:06

Что бы это конкретно дало? Являются ли $courses и $sections просто двумя отдельными массивами, и вы хотите выполнить одну и ту же функцию для значений в каждом из них? Вы всегда можете сделать:

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

Это, конечно, делает все обычные предположения о array_merge.

Или это $sections происходит от $course, и вы хотите что-то сделать для каждого раздела в каждом курсе?

foreach($courses as $course) {
    foreach($sections as $section) {
        // Here ya go
    }
}
 1
Author: VoteyDisciple, 2010-11-11 18:20:30

Вот так?

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

}
 0
Author: Edmhs, 2010-11-11 18:21:18