Je suis très nouveau dans les tableaux multidimensionnels, et cela me dérange beaucoup.
Mon tableau est le suivant:
$fields = array(
"names" => array(
"type" => "text",
"class" => "name",
"name" => "name",
"text_before" => "name",
"value" => "",
"required" => true,
)
)
Ensuite, j'ai une fonction vérifiant si ces entrées sont remplies, si elles sont nécessaires.
function checkForm($fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$fields[$field]['value'] = "Some error";
}
}
return $fields;
}
Maintenant mon problème est cette ligne
$fields[$field]['value'] = "Some error";
Je souhaite modifier le contenu du tableau d'origine, car je le renvoie, mais comment obtenir le nom du tableau actuel (noms dans cet exemple) dans ma boucle foreach?
Réponses:
En PHP, passer par reference (
&
) est ... controversé. Je recommande de ne pas l'utiliser sauf si vous savez pourquoi vous en avez besoin et de tester les résultats.Je recommanderais de faire ce qui suit:
Donc, utilisez essentiellement
$field
lorsque vous avez besoin des valeurs et$fields[$key]
lorsque vous devez modifier les données.la source
foreach
devrait être controversé? Ce n'est pas comme si c'était un appel de fonction avec des effets secondaires cachés ou quoi que ce soit.Utilisez
&
:&
transmet une valeur du tableau comme référence et ne crée pas de nouvelle instance de la variable. Ainsi, si vous modifiez la référence, la valeur d'origine changera.http://php.net/manual/en/language.references.pass.php
Edit 2018
Cette réponse semble être favorisée par beaucoup de gens sur Internet, c'est pourquoi j'ai décidé d'ajouter plus d'informations et de mises en garde.
Bien que le passage par référence dans
foreach
(ou fonctions) soit une solution claire et courte, pour de nombreux débutants, cela peut être un écueil dangereux.Cela peut être un problème sérieux lorsque les variables sont réutilisées dans la même portée. Une autre question SO illustre bien pourquoi cela pourrait être un problème.
La suppression d'un enregistrement ou la modification de la valeur de hachage (la clé) lors de l'itération sur la même boucle pourrait conduire à des comportements potentiellement inattendus dans PHP <7. Le problème se complique encore lorsque le tableau lui-même est une référence.
Performance Foreach.
En général, PHP préfère le passage par valeur en raison de la fonctionnalité de copie sur écriture. Cela signifie qu'en interne PHP ne créera pas de données dupliquées à moins que la copie de celles-ci ne doive être modifiée. On peut se demander si le passage par référence
foreach
offrirait une amélioration des performances. Comme c'est toujours le cas, vous devez tester votre scénario spécifique et déterminer quelle option utilise moins de mémoire et de temps cpu. Pour plus d'informations, voir l'article SO lié ci-dessous par NikiC.Lisibilité du code.
Créer des références en PHP est quelque chose qui devient rapidement incontrôlable. Si vous êtes novice et que vous n'avez pas le contrôle total de ce que vous faites, il est préférable de rester à l'écart des références. Pour plus d'informations sur l'
&
opérateur, consultez ce guide: Référence - Que signifie ce symbole en PHP?Pour ceux qui veulent en savoir plus sur cette partie du langage PHP : Références PHP expliquées
Une très belle explication technique de @NikiC sur la logique interne des boucles PHP foreach:
Comment fonctionne PHP «foreach»?
la source
unset($value);
après leforeach
crochet fermant, pour garantir que la variable par référence n'est plus disponible après l'itération. 3v4l.org/2V2AQUtilisez
foreach($fields as &$field){
- vous travaillerez donc avec le tableau d'origine.En savoir plus sur le passage par référence.
la source
C'est ce que je suggérerais de passer par référence
la source
$fields
?Essaye ça
la source