2
votes

Pousser des données dans des baies stockées dans une autre baie

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);
    }

    ?>


1 commentaires

foreach ($ arr en tant que & $ clé)


3 Réponses :


3
votes

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);
}


0 commentaires

3
votes

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);


0 commentaires

0
votes

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.


1 commentaires

Ouais. J'ai modifié ma réponse.