Несколько индексных переменных в цикле PHP foreach - PullRequest
31 голосов
/ 11 ноября 2010

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

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

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

Ответы [ 8 ]

49 голосов
/ 11 ноября 2010

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

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

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

15 голосов
/ 11 ноября 2010

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

for($i=0, $count = count($courses);$i<$count;$i++) {
 $course  = $courses[$i];
 $section = $sections[$i];
}
6 голосов
/ 11 ноября 2010

Вам нужно использовать вложенные циклы, как это:

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

Конечно, это зациклит каждый раздел для каждого курса.

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

foreach($courses as $key => $course)
{
    $section = $sections[$key];
}
5 голосов
/ 28 марта 2013

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/>";
}
?>
2 голосов
/ 11 ноября 2010

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

reset($sections);
foreach ($courses as $course)
{
 list($section) = each($sections);
}
2 голосов
/ 11 ноября 2010

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

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

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

    //here the code you wanted before
}
1 голос
/ 11 ноября 2010

Что бы это было, точно? Являются ли $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 голосов
/ 11 ноября 2010

как это?

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...