web-dev-qa-db-ja.com

PHP foreachループの複数のインデックス変数

PHPに複数の「インデックス」変数があり、次のような正しい構文を使用していない)でforeachループを使用することは可能ですか?

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

そうでない場合、同じ結果を達成する良い方法はありますか?

31
Donald Taylor

あなたができるまさにその結果を達成するために

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

しかし、それは2つの配列に対してのみ機能します

49
Will

両方の配列が同じサイズの場合、forループを次のように使用できます。

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

次のようなネストされたループを使用する必要があります。

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

もちろん、これはすべてのコースのすべてのセクションをループします。

各ペアを確認したい場合は、コース/セクションのペアを含むオブジェクトを使用してそれらをループするか、インデックスが同じであることを確認して実行することをお勧めします。

foreach($courses as $key => $course)
{
    $section = $sections[$key];
}
6
Alan Geleynse

トライ-

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/>";
}
?>
5
T.Todua

いいえ、これらの配列には他の数のアイテムがあるためです。

次のように明示的に記述する必要があります。

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

    //here the code you wanted before
}
2
Daimon

いいえ、これはおそらくPHPの配列カーソルが有用なまれなケースの1つです。

reset($sections);
foreach ($courses as $course)
{
 list($section) = each($sections);
}
2
AndreKR

それは正確に何をしますか? $courses$sectionsは2つの別々の配列であり、それぞれの値に対して同じ機能を実行したいですか?いつでもできます:

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

もちろん、これはarray_mergeに関する通常の仮定をすべて行います。

または、$sections$courseから来て、各コースの各セクションで何かをしたいのですか?

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

このような?

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

}
0
Edmhs