Hoe vind je de foreach-index?

Is het mogelijk om de foreachindex te vinden?

in een forlus als volgt:

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

$igeeft je de index.

Moet ik de for-lus gebruiken of is er een manier om de index in de foreach-lus te krijgen?


Antwoord 1, autoriteit 100%

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

$keyis de index van elk $arrayelement


Antwoord 2, autoriteit 18%

U kunt een hack in uw foreachplaatsen, zoals een veld dat bij elke doorloop wordt verhoogd, en dat is precies wat de for-lus u geeft in een numeriek- geïndexeerde reeks. Zo’n veld zou een pseudo-index zijn die handmatig moet worden beheerd (incrementen, enz.).

Een foreachgeeft je je index in de vorm van je $keywaarde, dus zo’n hack zou niet nodig moeten zijn.

bijv. in een 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++;
}

Antwoord 3, autoriteit 3%

Opgemerkt moet worden dat u key()op een willekeurige array om de huidige sleutel te vinden. Zoals je kunt raden, zal current()de huidige waarde retourneren en next()zal de aanwijzer van de array naar het volgende element verplaatsen.


Antwoord 4, autoriteit 2%

Owen heeft een goed antwoord. Als je alleen de sleutel wilt, en je werkt met een array, kan dit ook handig zijn.

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

Antwoord 5, autoriteit 2%

Je kunt $ibuiten de lus maken en $i++onderaan de lus doen.


Antwoord 6

Deze twee lussen zijn equivalent (behalve de veiligheidsleuningen natuurlijk):

for ($i=0; $i<count($things); $i++) { ... }
foreach ($things as $i=>$thing) { ... }

bijv.

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

Antwoord 7

Ik denk dat de beste optie hetzelfde is:

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

het is gemakkelijk en normaal


Antwoord 8

PHP-arrays hebben interne pointers, dus probeer dit:

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

Werkt goed voor mij (alleen zeer voorlopig getest).


Antwoord 9

Jonathan heeft gelijk. PHP-arrays fungeren als een toewijzingstabel die sleutels toewijst aan waarden. in sommige gevallen kunt u een index krijgen als uw array is gedefinieerd, zoals

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

je output zal zijn

2
5

in dat geval heeft elk element in de array een kenbare index, maar als je dan zoiets als het volgende doet

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

u krijgt geen uitvoer. Dit gebeurt omdat arrays in PHP geen lineaire structuren zijn zoals in de meeste talen. Ze lijken meer op hash-tabellen die al dan niet sleutels hebben voor alle opgeslagen waarden. Vandaar dat foreach geen indexen gebruikt om eroverheen te crawlen, omdat ze alleen een index hebben als de array is gedefinieerd. Als je een index nodig hebt, zorg er dan voor dat je arrays volledig zijn gedefinieerd voordat je eroverheen crawlt, en gebruik een for-lus.


Antwoord 10

Normaal gesproken doe ik dit als ik met associatieve arrays werk:

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

Dit werkt ook prima met niet-associatieve arrays. $key is de indexwaarde. Als je wilt, kun je dit ook doen:

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

Antwoord 11

Ik heb het op deze manier opgelost, toen ik de foreach-index en waarde in dezelfde context moest gebruiken:

$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

Antwoord 12

Ik gebruik ++$keyin plaats van $key++om vanaf 1 te beginnen. Normaal gesproken begint het vanaf 0.

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

Uitvoer:

Question: 1
......
Question:2
.....
.
.
.

Antwoord 13

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

Antwoord 14

Ik zou dit willen toevoegen, ik heb dit in laravel gebruikt om mijn tabel te indexeren:

  • Met $loop->index
  • Ik verhoog het ook vooraf met ++$loop om te beginnen bij 1

Mijn code:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach

Other episodes