Yanıtlar:
foreach($array as $key=>$value) {
// do stuff
}
$keyher $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 foreachartırılmış bir alan gibi bir kesmek koyabilirsiniz , bu da fordö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 $keydeğ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.
$keygelen $key=>$valueAncak, düşük performans basit bir döngüde / belirgin olmayan bir algılanabilir bahis ...).
$iDö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 fordö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
$loopGenel 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
}