recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment fusionner des tableaux et conserver les clés ?

J'ai deux tableaux :

$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);

Je souhaite les fusionner et conserver les clés et l'ordre au lieu de les réindexer ! !

Comment est-ce devenu comme ça ?

Array
(
    [a] => new value
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [123] => 456
)

J'ai essayé array_merge() mais il ne préserve pas les clés :

print_r(array_merge($array1, $array2));

Array
(
    [a] => 'new value'
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [0] => 456
)

J'ai essayé d'utiliser l'opérateur union mais il n'écrase pas l'élément :

print_r($array1 + $array2);

Array
(
    [a] => 1   <-- not overwriting
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 5
    [f] => 6
    [123] => 456
)

J'ai essayé d'échanger mes places, mais c'était dans le mauvais ordre, ce n'était pas ce dont j'avais besoin :

print_r($array2 + $array1);

Array
(
    [d] => 4
    [e] => 5
    [f] => 6
    [a] => new value 
    [123] => 456
    [b] => 2
    [c] => 3
)

Je ne veux pas utiliser de boucle, existe-t-il un moyen d'obtenir des performances élevées ?

P粉081360775P粉081360775408 Il y a quelques jours569

répondre à tous(2)je répondrai

  • P粉593536104

    P粉5935361042023-10-18 09:51:37

    Supposons que nous ayons 3 tableaux comme indiqué ci-dessous.

    $a = array(0=>['label'=>'Monday','is_open'=>1],1=>['label'=>'Tuesday','is_open'=>0]);
    
    $b = array(0=>['open_time'=>'10:00'],1=>['open_time'=>'12:00']); 
    
    $c = array(0=>['close_time'=>'18:00'],1=>['close_time'=>'22:00']);

    Maintenant, si vous souhaitez fusionner tous ces tableaux et que le tableau final contienne toutes les données du tableau sous les clés 0 en 0 et 1 en 1 et ainsi de suite.

    Ensuite, vous devez utiliser la fonction PHP array_replace_recursive comme suit.

    $final_arr = array_replace_recursive($a, $b , $c);

    Les résultats sont les suivants.

    Array
    (
        [0] => Array
            (
                [label] => Monday
                [is_open] => 1
                [open_time] => 10:00
                [close_time] => 18:00
            )
    
        [1] => Array
            (
                [label] => Tuesday
                [is_open] => 0
                [open_time] => 12:00
                [close_time] => 22:00
            )
    
    )

    J'espère que les solutions ci-dessus répondront le mieux à vos besoins ! !

    répondre
    0
  • P粉729436537

    P粉7294365372023-10-18 09:45:00

    Vous recherchez array_replace() :

    $array1 = array('a' => 1, 'b' => 2, 'c' => 3);
    $array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
    print_r(array_replace($array1, $array2));

    Disponible depuis PHP 5.3.

    Mise à jour

    Vous pouvez également utiliser l'opérateur union array ; il fonctionne sur les anciennes versions et peut également être plus rapide :

    print_r($array2 + $array1);

    répondre
    0
  • Annulerrépondre