PHP ajoute un tableau associatif avec des clés littérales?


112

Est-il possible de préfixer un tableau associatif avec des paires clé littérale => valeur? Je sais que array_unshift () fonctionne avec des touches numériques, mais j'espère quelque chose qui fonctionnera avec des clés littérales.

À titre d'exemple, j'aimerais faire ce qui suit:

$array1 = array('fruit3'=>'apple', 'fruit4'=>'orange');
$array2 = array('fruit1'=>'cherry', 'fruit2'=>'blueberry');

// prepend magic

$resulting_array = ('fruit1'=>'cherry', 
                    'fruit2'=>'blueberry', 
                    'fruit3'=>'apple', 
                    'fruit4'=>'orange');

Réponses:


219

Tu ne peux pas simplement faire:

$resulting_array = $array2 + $array1;

?


15
Voir aussi array_merge () et sa différence par rapport à l'utilisation de l'opérateur +: br.php.net/manual/en/function.array-merge.php#92602
Havenard

2
@cletus: Sheesh. Ouais je peux. Je ne sais pas ce qui m'a fait penser que je ne pouvais pas ou ce qui ne fonctionnait pas avant. Merci pour la réponse.
Colin Brock

Il vaut la peine de noter la différence mais cette différence est pertinente pour préserver les clés numériques et ce tableau est un tableau associatif «pur» avec des clés de chaîne.
cletus

29

La réponse est non. Vous ne pouvez pas ajouter au début d'un tableau associatif une paire clé-valeur.

Cependant, vous pouvez créer un nouveau tableau contenant la nouvelle paire clé-valeur au début du tableau avec l'opérateur union +. Le résultat est un tableau entièrement nouveau et la création du nouveau tableau a une complexité O (n).

La syntaxe est ci-dessous.

$new_array = array('new_key' => 'value') + $original_array;

Remarque: n'utilisez pas array_merge (). array_merge () écrase les clés et ne conserve pas les clés numériques.


"écrase les clés et ne conserve pas les clés numériques" ... a) comment l'opérateur d'union ("+") gère-t-il les clés "dupliquées"? re: ne pas conserver les touches numériques: probablement souhaité
Brad Kent

16

Dans votre situation, vous souhaitez utiliser array_merge ():

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));

Pour ajouter une valeur unique, pour un tableau associatif, au lieu de array_unshift (), utilisez à nouveau array_merge ():

array_merge(array($key => $value), $myarray);

5

@Cletus est parfait. Juste pour ajouter, si l'ordre des éléments dans les tableaux d'entrée est ambigu et que vous avez besoin que le tableau final soit trié, vous voudrez peut-être trier :

$resulting_array = $array1 + $array2;
ksort($resulting_array);

4
En fin de compte, ksortrenvoie booléen, donc ce qui précède doit être fait comme deux instructions et non une seule, par exemple $a = $array1 + $array2; ksort($a);, sinon ce $resulting_arraysera une valeur booléenne et non le tableau que vous attendiez.
El Yobo du

3

En utilisant la même méthode que @mvpetrovich, vous pouvez utiliser la version abrégée d'un tableau pour raccourcir la syntaxe.

$_array = array_merge(["key1" => "key_value"], $_old_array);

Références:

PHP: array_merge ()

PHP: Tableaux - Manuel

Depuis PHP 5.4, vous pouvez également utiliser la syntaxe de tableau court, qui remplace array () par [].

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.