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');
Colin Brock
la source

Réponses:

219

Tu ne peux pas simplement faire:

$resulting_array = $array2 + $array1;

?

cletus
la source
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.

PHPguru
la source
"é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);
mvpetrovitch
la source
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);
karim79
la source
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 [].

Bryce Gough
la source