Несколько индексных переменных в цикле PHP для каждого
Возможно ли иметь цикл foreach
в PHP с несколькими переменными "индекса", похожий на следующий (который не использует правильный синтаксис)?
foreach ($courses as $course, $sections as $section)
Если нет, то есть ли хороший способ добиться того же результата?
8 answers
Чтобы достичь именно такого результата, вы могли бы сделать
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){
}