Réponses:
foreach($array as $key=>$value) {
// do stuff
}
$key
est l'indice de chaque $array
élément
$myarr['foo'] = 'bar';
cette méthode échoue
vatiable++;
à chaque itération. La manière traditionnelle, mais a toujours fonctionné.
Vous pouvez mettre un hack dans votre foreach
, comme un champ incrémenté à chaque parcours, ce qui est exactement ce que la for
boucle vous donne dans un tableau indexé numériquement. Un tel champ serait un pseudo-index nécessitant une gestion manuelle (incréments, etc.).
A foreach
vous donnera votre index sous la forme de votre $key
valeur, donc un tel hack ne devrait pas être nécessaire.
par exemple, dans un 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++;
}
Il convient de noter que vous pouvez appeler key()
n'importe quel tableau pour trouver la clé actuelle activée. Comme vous pouvez le deviner current()
, la valeur actuelle next()
sera renvoyée et le pointeur du tableau sera déplacé vers l'élément suivant.
$key
from $key=>$value
) ... Cependant, je parie que les performances inférieures sont non significatives / perceptibles dans une boucle simple.
Vous pouvez créer en $i
dehors de la boucle et faire $i++
en bas de la boucle.
Ces deux boucles sont équivalentes (sauf les garde-corps de sécurité bien sûr):
for ($i=0; $i<count($things); $i++) { ... }
foreach ($things as $i=>$thing) { ... }
par exemple
for ($i=0; $i<count($things); $i++) {
echo "Thing ".$i." is ".$things[$i];
}
foreach ($things as $i=>$thing) {
echo "Thing ".$i." is ".$thing;
}
Je pense que la meilleure option est la même:
foreach ($lists as $key=>$value) {
echo $key+1;
}
c'est facile et normalement
Jonathan a raison. Les tableaux PHP agissent comme une table de mappage des clés de correspondance avec les valeurs. dans certains cas, vous pouvez obtenir un index si votre tableau est défini, comme
$var = array(2,5);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
votre sortie sera
2
5
auquel cas chaque élément du tableau a un index connaissable, mais si vous faites quelque chose comme le suivant
$var = array_push($var,10);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
vous n'obtenez aucune sortie. Cela se produit car les tableaux en PHP ne sont pas des structures linéaires comme ils le sont dans la plupart des langages. Ils ressemblent davantage à des tables de hachage qui peuvent ou non avoir des clés pour toutes les valeurs stockées. Par conséquent, foreach n'utilise pas d'index pour les parcourir, car ils n'ont un index que si le tableau est défini. Si vous avez besoin d'un index, assurez-vous que vos tableaux sont entièrement définis avant de les parcourir et utilisez une boucle for.
$var[] = 10;
(voir le lien PHP pour le guide), donc la deuxième for
boucle sort les résultats attendus.
Je le fais normalement lorsque je travaille avec des tableaux associatifs:
foreach ($assoc_array as $key => $value) {
//do something
}
Cela fonctionnera également très bien avec les tableaux non associatifs. $ key sera la valeur d'index. Si vous préférez, vous pouvez également le faire:
foreach ($array as $indx => $value) {
//do something
}
Je voudrais ajouter ceci, je l'ai utilisé dans laravel pour simplement indexer ma table:
Mon code:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
variable ne peut pas être utilisée car elle est demandée pour PHP général.
J'ai résolu de cette façon, quand j'ai dû utiliser l'index et la valeur foreach dans le même contexte:
$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
}