Возможно ли иметь цикл foreach
в PHP с несколькими «индексными» переменными, похожий на следующий (который не использует правильный синтаксис)?
foreach ($courses as $course, $sections as $section)
Если нет, есть ли хороший способ добиться такого же результата?
для достижения именно того результата, который вы могли бы сделать
foreach (array_combine($courses, $sections) as $course => $section)
но это работает только для двух массивов
Если оба массива имеют одинаковый размер, вы можете использовать цикл for
как:
for($i=0, $count = count($courses);$i<$count;$i++) { $course = $courses[$i]; $section = $sections[$i]; }
Вам нужно будет использовать вложенные петли следующим образом:
foreach($courses as $course) { foreach($sections as $section) { } }
Конечно, это будет охватывать каждый раздел для каждого курса.
Если вы хотите посмотреть на каждую пару, вам лучше использовать объекты, которые содержат пары курса / раздела, и перебирать их, или убедиться, что индексы одинаковы и делают:
foreach($courses as $key => $course) { $section = $sections[$key]; }
ПЫТАТЬСЯ –
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/>"; } ?>
Нет, потому что у этих массивов может быть другое количество предметов.
Вы должны явно написать что-то вроде этого:
for ($i = 0; $i < count($courses) && $i < count($sections); ++$i) { $course = $courses[$i]; $section = $sections[$i]; //here the code you wanted before }
Нет, это, пожалуй, один из редких случаев, когда полезно использовать курсоры массива PHP:
reset($sections); foreach ($courses as $course) { list($section) = each($sections); }
Что это было бы? Являются ли $courses
и $sections
только двумя отдельными массивами, и вы хотите выполнять одну и ту же функцию для значений в каждой? Вы всегда можете:
foreach(array_merge($courses, $sections) as $thing) { ... }
Это, конечно, делает все обычные предположения о array_merge
.
Или это то, что $sections
исходит из $course
и вы хотите что-то сделать для каждого раздела в каждом курсе?
foreach($courses as $course) { foreach($sections as $section) { // Here ya go } }
как это?
foreach($array as $b=>$c){ }