Comment puis-je ajouter des valeurs à un tableau contenu dans un autre tableau?
Dans l'exemple de code ci-dessous, j'essaie d'ajouter la chaîne 'yellow' aux deux tableaux stockés par $ arr pour former [['blue', yellow '], [' green ',' yellow ']]
Dans la première boucle foreach, le mot yellow a été succès poussé dans le tableau contenu qui peut être vu quand j'imprime le tableau $ key cependant
quand je devais imprimer le $ arr dans la boucle foreach finale le jaune que j'ai ajouté a disparu p >
$arr = array(array("blue"),array("green"));
foreach ($arr as $key)
{
array_push($key,"yellow");
print_r($key);
}
foreach ($arr as $key)
{
print_r($key);
}
?>
3 Réponses :
Utilisez la référence sur votre foreach comme ceci & $ key pour enregistrer votre modification:
PHP fait une copie de la variable dans le foreach, donc votre $ key n'est pas en fait le même que celui de votre tableau précédent.
De @ Dharman :
& passe une valeur du tableau comme référence et ne crée pas de nouveau instance de la variable.
Alors faites simplement:
$arr = array(array("blue"),array("green"));
foreach ($arr as &$value)
{
$value[]='yellow';
print_r($value);
}
foreach ($arr as $value)
{
print_r($value);
}
Voici foreach aucune approche clé
Array
(
[0] => Array
(
[0] => blue
[1] => yellow
)
[1] => Array
(
[0] => green
[1] => yellow
)
)
Voici foreach avec approche clé
$arr = [["blue"], ["green"]];
$arr = array_map(function($item) {
$item[] = "yellow";
return $item;
}, $arr);
print_r($arr);
Voici une autre approche utilisant array_walk
$arr = [["blue"], ["green"]];
array_walk($arr, function(&$item) {
$item[] = "yellow";
});
print_r($arr);
Voici la même chose avec array_map
$arr = [["blue"], ["green"]];
foreach ($arr as $key=>$value)
$arr[$key][]='yellow';
print_r($arr);
Sortie pour tous les exemples
$arr = [["blue"], ["green"]];
foreach ($arr as &$value)
$value[]='yellow';
print_r($arr);
Vous pouvez également utiliser array_map pour cela. Voir le code ci-dessous par exemple.
$a = [["blue"],["green"]];
$b = array_map(function($n) {
$n[] = "Yellow";
return $n;
}, $a);
print_r($b);
J'espère que cela vous aidera.
Ouais. J'ai modifié ma réponse.
foreach ($ arr en tant que & $ clé)