web-dev-qa-db-fra.com

Différence entre "as $ key => $ value" et "as $ value" dans PHP pour chaque

J'ai un appel de base de données et j'essaie de comprendre ce que le $key => $value fait dans une boucle foreach.

La raison pour laquelle je pose cette question est parce que ces deux codes produisent la même chose. J'essaie donc de comprendre pourquoi il est écrit de cette façon. Voici le code:

foreach($featured as $key => $value){
  echo $value['name'];
}

cela produit le même résultat que:

foreach($featured as $value) {
  echo $value['name']
}

Ma question est donc la suivante: quelle est la différence entre $key => $value ou juste $value dans la boucle foreach. Le tableau est multidimensionnel si cela fait une différence, je veux juste savoir pourquoi passer $key à $value dans la boucle foreach.

53
handmdmr

Eh bien, le $key => $value Dans la boucle foreach fait référence aux paires clé-valeur dans les tableaux associatifs, où la clé sert d'index pour déterminer la valeur au lieu d'un nombre comme 0,1,2, ... In PHP, les tableaux associatifs ressemblent à ceci:

$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);

Dans le code PHP: $featured Est le tableau associatif en boucle, et as $key => $value Signifie que chaque fois que la boucle s'exécute et sélectionne une paire clé-valeur le tableau, il stocke la clé dans la variable locale $key à utiliser dans le bloc de boucle et la valeur dans la variable locale $value. Ainsi, pour notre exemple de tableau ci-dessus, la boucle foreach atteindrait le La première paire clé-valeur, et si vous spécifiez as $key => $value, il stockera 'key1' dans la variable $key et 'value1' dans le $value variable.

Puisque vous n'utilisez pas la variable $key Dans votre bloc de boucle, l'ajouter ou la supprimer ne modifie pas la sortie de la boucle, mais il est préférable d'inclure la paire clé-valeur pour montrer qu'il s'agit d'une variable associative. tableau.

Notez également que la désignation as $key => $value Est arbitraire. Vous pouvez remplacer cela par as $foo => $bar Et cela fonctionnerait bien si vous modifiiez les références de variable à l'intérieur du bloc de boucle par les nouvelles variables, $foo Et $bar. Mais leur fabrication $key Et $value Permet de garder une trace de ce qu’ils signifient.

75
djiango

Disons que vous avez un tableau associatif comme ceci:

$a = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => array('x'=>123)
);

Dans la première itération: $key="one" Et $value=1.

Parfois, vous avez besoin de cette clé. Si vous ne voulez que la valeur, vous pouvez éviter de l'utiliser.

Dans la dernière itération: $key='seventeen' Et $value = array('x'=>123) donc pour obtenir la valeur du premier élément de cette valeur array, vous avez besoin de key, x dans cette cas: $value['x'] =123.

16
Charaf JRA

Un endroit très important où il se trouve CHAMPS OBLIGATOIRES pour utiliser le key => value _ _ _ _ _ _ foreach loop doit être mentionné. Supposons que vous souhaitiez ajouter un élément new/sub - à un élément existant ( dans une autre clé ) dans l'élément $features tableau. Vous devriez faire ce qui suit:

foreach($features as $key => $feature) {
    $features[$key]['new_key'] = 'new value';  
} 


Au lieu de cela:

foreach($features as $feature) {
    $feature['new_key'] = 'new value';  
} 

La différence grande est que, dans le premier cas, vous accédez à la sous-valeur du tableau via le tableau principal lui-même avec une clé à l'élément sur lequel pointe actuellement le pointeur du tableau.

Alors que dans la seconde ( qui ne fonctionne pas à cette fin ), vous affectez la sous-valeur du tableau à une variable temporaire $feature qui n'est pas défini après chaque itération de la boucle.

8

La différence est que sur le

foreach($featured as $key => $value){
 echo $value['name'];
}

vous pouvez manipuler la valeur de chaque $key de chaque itération à partir de leur paire clé-valeur. Comme @djiango a répondu, si vous ne manipulez pas le $key De chaque valeur, le résultat de la boucle sera exactement le même que

foreach($featured as $value) {
  echo $value['name']
}

Source: Vous pouvez le lire depuis le Documentation PHP :

La première forme boucle sur le tableau donné par array_expression. À chaque itération, la valeur> de l'élément actuel est affectée à $ valeur et le pointeur de tableau interne est avancé de> un (ainsi lors de la prochaine itération, vous regarderez l'élément suivant). *

Le second formulaire assignera en outre la clé de l'élément en cours à la variable $ key à chaque itération.


Si les données que vous manipulez sont, par exemple, des tableaux avec des clés personnalisées, vous pouvez les imprimer à l'écran de la manière suivante:

$array = ("name" => "Paul", "age" => 23);

foreach($featured as $key => $value){
 echo $key . "->" . $value;
}

Devrait imprimer:

name->Paul

age->23

Et vous ne pourriez pas faire cela avec un foreach($featured as $value) avec la même facilité. Considérez donc le format ci-dessus comme un moyen pratique de manipuler les clés en cas de besoin.

À votre santé

7
sargas

Disons que vous avez un tableau comme celui-ci:

$array = (0=>'123',1=>'abc','test'=>'hi there!')

Dans votre boucle foreach, chaque boucle serait:

$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'

C'est idéal pour les moments où vous devez connaître la clé de tableau.

3
aynber

si le tableau ressemble à:

  • $ sélectionnée ["fruit"] = "orange";
  • $ sélectionnée ["fruit"] = "banane";
  • $ sélectionnée ["légume"] = "carotte";

la touche $ contiendra le type (fruit ou légume) pour chaque valeur de tableau (orange, banane ou carotte)

2
3seconds

ici $ key contiendra le $ key associé à $ valeur dans $ vedette. La différence est que maintenant vous avez cette clé.

array("thekey"=>array("name"=>"joe"))

ici valeur de $ est

array("name"=>"joe")

$ key est "thekey"

1
Thomas Martin Klein