587

foreachインデックスを見つけることは可能ですか?

次のようにforループします。

for ($i = 0; $i < 10; ++$i) {
   echo $i . ' ';
}

$iインデックスを提供します。

ループを使用するfor必要がありますか、またはループでインデックスを取得する方法はありforeachますか?

4

14 に答える 14

1090
foreach($array as $key=>$value) {
    // do stuff
}

$keyは各$array要素のインデックスです

于 2008-09-26T18:24:33.833 に答える
194

foreachランスルーごとにインクリメントされるフィールドなど、にハックを入れることができます。これは、forループが数値的にインデックス付けされた配列で提供するものとまったく同じです。このようなフィールドは、手動管理 (インクリメントなど) を必要とする疑似インデックスになります。

Aは値foreachの形式でインデックスを提供する$keyため、そのようなハックは必要ありません。

たとえば、foreach

$index = 0;
foreach($data as $key=>$val) {
    // Use $key as an index, or...

    // ... manage the index this way..
    echo "Index is $index\n";
    $index++;
}
于 2008-09-26T18:25:54.190 に答える
29

key()任意の配列を呼び出して、現在のキーがオンになっていることを確認できることに注意してください。ご想像のとおりcurrent()、現在の値を返し、next()配列のポインターを次の要素に移動します。

于 2011-03-04T11:17:22.553 に答える
23

オーウェンは良い答えを持っています。キーだけが必要で、配列を操作している場合、これも役立つ場合があります。

foreach(array_keys($array) as $key) {
//  do stuff
}
于 2008-09-26T21:35:43.080 に答える
18

$iループの外側で作成し、ループ$i++の下部で実行できます。

于 2008-09-26T18:25:29.697 に答える
10

これらの 2 つのループは同等です (もちろん、安全柵を禁止します)。

for ($i=0; $i<count($things); $i++) { ... }

foreach ($things as $i=>$thing) { ... }

例えば

for ($i=0; $i<count($things); $i++) {
    echo "Thing ".$i." is ".$things[$i];
}

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}
于 2011-01-27T22:43:06.903 に答える
10

最良のオプションは同じだと思います:

foreach ($lists as $key=>$value) {
    echo $key+1;
}

それは簡単で普通です

于 2016-05-12T13:59:54.563 に答える
6

PHP配列には内部ポインターがあるため、これを試してください:

foreach($array as $key => $value){
   $index = current($array);
}

私にとっては問題なく動作します(ただし、非常に予備的にテストされているだけです)。

于 2008-10-28T20:43:54.667 に答える
5

ジョナサンは正しいです。PHP配列は、キーを値にマッピングするマップテーブルとして機能します。場合によっては、配列が定義されている場合にインデックスを取得できます。

$var = array(2,5);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

出力は次のようになります

2
5

この場合、配列内の各要素には既知のインデックスがありますが、次のようなことを行うと

$var = array_push($var,10);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

出力はありません。これは、PHPの配列が、ほとんどの言語のように線形構造ではないために発生します。それらは、格納されているすべての値のキーを持つ場合と持たない場合があるハッシュテーブルに似ています。したがって、foreachは、配列が定義されている場合にのみインデックスを持っているため、インデックスを使用してそれらをクロールしません。インデックスが必要な場合は、配列をクロールする前に配列が完全に定義されていることを確認し、forループを使用してください。

于 2008-09-26T18:47:18.833 に答える
4

1から始める++$key代わりに使っています。通常は0から始まります。$key++

@foreach ($quiz->questions as $key => $question)
 <h2> Question: {{++$key}}</h2>
 <p>{{$question->question}}</p>
@endforeach

出力:

Question: 1
......
Question:2
.....
.
.
.
于 2021-05-16T14:48:37.113 に答える
2

私は通常、連想配列を操作するときにこれを行います。

foreach ($assoc_array as $key => $value) {
 //do something
}

これは、非連想配列でも問題なく機能します。$key はインデックス値になります。必要に応じて、これも実行できます。

foreach ($array as $indx => $value) {
  //do something
}
于 2014-07-07T00:26:57.120 に答える