web-dev-qa-db-ja.com

Foreachインデックスを見つける方法

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

次のようにforループで。

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

$iはあなたにインデックスを与えるでしょう。

forループを使用する必要がありますか、それともforeachループでインデックスを取得する方法がありますか。

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

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

773
Owen

foreachname__にハックを入れることができます。たとえば、各実行時にフィールドがインクリメントされます。これは、forname__ループによって数値インデックス配列で得られるものです。そのようなフィールドは、手動管理(増分など)を必要とする疑似索引になります。

foreachname__はあなたの$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++;
}
147
ConroyP

現在のキーがオンになっているものを見つけるために、任意の配列に対して key() を呼び出すことができます。ご想像のとおり、current()は現在の値を返し、next()は配列のポインタを次の要素に移動します。

24
Bailey Parker

オーウェンは良い答えを持っています。キーだけが欲しくて、あなたが配列で作業しているなら、これも役に立つかもしれません。

foreach(array_keys($array) as $key) {
//  do stuff
}
17
Zoredache

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

13
Ólafur Waage

これら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;
}
8
Trev

PHP配列は内部ポインタを持っているので、これを試してください:

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

私にとっては問題ないでしょう(ただし非常に予備的にしかテストされていません)。

5
Bowser

ジョナサンは正しいです。 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ループを使用してください。

4
The Brawny Man

私は最良の選択肢は同じようだと思います:

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

それは簡単で普通です

3
Mikel Williams

私はこれを追加したいのですが、私は自分のテーブルにインデックスを付けるためだけにこれを使用しました。

  • $ loop-> indexを使って
  • 私はまた、1から始まるように++ $ loopでそれを事前増加させます。

私のコード:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach
0
Taranis
foreach(array_keys($array) as $key) {
//  do stuff
}
0
gdmanandamohon

連想配列を扱うときは、通常これを行います。

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

これは非連想配列でもうまく動作します。 $ keyがインデックス値になります。お望みなら、これもできます。

foreach ($array as $indx => $value) {
  //do something
}
0
Randy Greencorn