Foreach endeksi bulmak için nasıl

9 Cevap php

Bu foreach endeksi bulmak mümkün mü?

bir aşağıdaki gibi döngü "için":

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

$ Sana endeksini verecektir.

Ben döngü için kullanmak zorunda ya da foreach döngü indeksi almak için bazı yolu var mı?

9 Cevap

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

$key her $array elemanın indeks

Böyle artırılır bir alan olarak, sizin foreach bir hack koyabilirsiniz her çalışma yoluyla, for döngü bir sayısal endeksli dizide verir tam olarak ne olduğunu. Böyle bir alan kılavuzu yönetimi (artışlarla, vb) ihtiyacı olan bir pseudo-index olacaktır.

A foreach sizin $key değerin şeklinde size indeksi verecektir, bu nedenle böyle bir hack gerekli olmamalıdır.

, örneğin, bir 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++;
}

Bu on any array to find the current key its on. As you can guess current() geçerli değerini döndürecektir key() arayabilir ve next() sonraki elemana dizinin imlecini hareket edeceği unutulmamalıdır.

Owen iyi bir cevabı vardır. Sadece anahtarı istiyorum, ve bir dizi ile çalışıyorsanız bu da yararlı olabilir.

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

Sen döngü dışında $ i oluşturmak ve $ i + + döngü altındaki yapabilirsiniz.

(Not, C # ama konsept PHP aynıdır) burada benim cevap okuyunuz:

http://stackoverflow.com/questions/43021/c-get-index-of-current-foreach-iteration#43029

CliffNotes:

Foreach bir yineleyici ile çalışır, bu yüzden endeks asla bilinmez.

Jonathan doğru. PHP diziler değerlere bir harita tablo eşleme tuşları olarak hareket ederler. diziniz gibi, tanımlanmış ise, bazı durumlarda bir dizin alabilirsiniz

$var = array(2,5);

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

çıkış olacak

2
5

bu durumda dizideki her öğe bir bilinebilir indeksine sahiptir, ancak daha sonra aşağıdaki gibi bir şey yaparsanız

$var = array_push($var,10);

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

Eğer hiçbir çıkış olsun. En çok dilde olduğu gibi PHP diziler doğrusal yapılar değildir çünkü bu olur. Onlar daha fazla veya tüm saklanan değerleri tuşları olmayabilir karma tablolar gibidir. Dizi tanımlanmış ise sadece bir dizin var çünkü Dolayısıyla foreach üzerlerine sürün dizinleri kullanmaz. Eğer bir dizin olması gerekir varsa, diziler tamamen üzerlerinde sürünerek önce tanımlandığından emin, ve döngü için kullanın.

Bu iki döngüler (tabii emniyet korkulukları bar) eşdeğerdir:

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

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

örneğin

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

foreach ($things as $i=>$thing)
{
    echo "Thing ".$i." is ".$thing;
}

PHP diziler iç işaretçileri var, bu yüzden bu deneyin:

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

Benim için iyi çalışıyor (sadece çok ön olsa test).