Yanıtlar:
foreach($array as $key=>$value) {
// do stuff
}
$key
her $array
öğenin dizinidir
$myarr['foo'] = 'bar';
bu yöntem başarısız oluyor
vatiable++;
, her yinelemede onu artırmak daha iyi olduğunu düşünüyorum . Geleneksel yol, ama her zaman çalıştı.
Her bir geçişte foreach
artırılmış bir alan gibi bir kesmek koyabilirsiniz , bu da for
döngünün size sayısal olarak dizine alınmış bir dizide tam olarak verdiği şeydir . Böyle bir alan, manuel yönetime (artışlar, vb.) İhtiyaç duyan bir sahte dizin olacaktır.
A foreach
, endeksinizi $key
değeriniz şeklinde verecektir , bu nedenle böyle bir hack gerekli değildir.
ö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++;
}
key()
Geçerli anahtarı açık bulmak için herhangi bir diziyi çağırabileceğinizi belirtmek gerekir . Tahmin edebileceğiniz gibi current()
, geçerli değeri döndürür next()
ve dizinin işaretçisini bir sonraki öğeye taşır.
$key
gelen $key=>$value
Ancak, düşük performans basit bir döngüde / belirgin olmayan bir algılanabilir bahis ...).
$i
Döngünün dışında oluşturabilir ve döngünün $i++
alt kısmında yapabilirsiniz .
Bu iki döngü eşdeğerdir (elbette güvenlik korkuluklarını bar):
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;
}
Bence en iyi seçenek aynı:
foreach ($lists as $key=>$value) {
echo $key+1;
}
kolay ve normalde
Jonathan doğrudur. PHP dizileri anahtarları değerlerle eşleyen bir harita tablosu işlevi görür. bazı durumlarda diziniz tanımlanmışsa, örneğin
$var = array(2,5);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
çıktınız olacak
2
5
bu durumda dizideki her öğenin bilinir bir dizini vardır, ancak aşağıdaki gibi bir şey yaparsanız
$var = array_push($var,10);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
hiç çıktı almazsınız. Bunun nedeni PHP'deki dizilerin çoğu dilde olduğu gibi doğrusal yapı olmamasıdır. Daha çok, depolanan tüm değerler için anahtarları olabilecek veya içermeyecek karma tablolar gibidir. Bu nedenle foreach, yalnızca dizi tanımlandıysa bir dizine sahip oldukları için üzerlerinde tarama yapmak için dizinler kullanmaz. Bir dizine sahip olmanız gerekiyorsa, dizilerinizi taramadan önce dizilerinizin tam olarak tanımlandığından emin olun ve for döngüsü kullanın.
$var[] = 10;
(rehberlik için PHP bağlantısına bakın), böylece ikinci for
döngü beklenen sonuçları verir.
Normalde ilişkilendirilebilir dizilerle çalışırken bunu yaparım:
foreach ($assoc_array as $key => $value) {
//do something
}
Bu ilişkisel olmayan dizilerde de işe yarayacaktır. $ anahtarı dizin değeri olacaktır. İsterseniz bunu da yapabilirsiniz:
foreach ($array as $indx => $value) {
//do something
}
Bunu eklemek istiyorum, ben sadece benim tablo dizin için laravel kullandım:
Kodum:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
Genel PHP istedi çünkü değişken kullanılan olamaz.
Ben aynı şekilde foreach endeksi ve değeri kullanmak zorunda kaldı, bu şekilde çözüldü:
$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {
echo $letter; //Here $letter content is the actual index
echo $array[$letter]; // echoes the array value
}//foreach
foreach(array_keys($array) as $key) {
// do stuff
}