PHP antepone l'array associativo con chiavi letterali?


112

È possibile anteporre un array associativo con la chiave letterale => coppie di valori? So che array_unshift () funziona con i tasti numerici, ma spero in qualcosa che funzioni con i tasti letterali.

Ad esempio, vorrei fare quanto segue:

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

// prepend magic

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

Risposte:


219

Non puoi semplicemente fare:

$resulting_array = $array2 + $array1;

?


15
Vedi anche array_merge () e la sua differenza rispetto all'uso dell'operatore +: br.php.net/manual/en/function.array-merge.php#92602
Havenard

2
@cletus: Sheesh. Sì, posso. Non sono sicuro di cosa mi ha fatto pensare che non potevo o cosa non funzionava prima. Grazie per la risposta.
Colin Brock,

Vale la pena notare la differenza, ma questa differenza è rilevante per preservare i tasti numerici e questo array è un array associativo "puro" con chiavi stringa.
cletus

29

La risposta è no. Non è possibile anteporre un array associativo con una coppia chiave-valore.

Tuttavia è possibile creare un nuovo array che contiene la nuova coppia chiave-valore all'inizio dell'array con l'operatore di unione + . Il risultato è un array completamente nuovo e la creazione del nuovo array ha una complessità O (n).

La sintassi è di seguito.

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

Nota: non utilizzare array_merge (). array_merge () sovrascrive le chiavi e non conserva le chiavi numeriche.


"sovrascrive le chiavi e non conserva le chiavi numeriche" ... a) in che modo l'operatore di unione ("+") gestisce le chiavi "duplicate"? ri: non conservare i tasti numerici: probabilmente desiderato
Brad Kent

16

Nella tua situazione, vuoi usare array_merge ():

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

Per anteporre un singolo valore, per un array associativo, invece di array_unshift (), usa di nuovo array_merge ():

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

5

@Cletus è perfetto. Solo per aggiungere, se l'ordine degli elementi negli array di input è ambiguo e hai bisogno che l'array finale sia ordinato, potresti voler ksort :

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

4
Come nota finale, ksortrestituisce booleano, quindi quanto sopra deve essere fatto come due istruzioni non una, ad esempio $a = $array1 + $array2; ksort($a);, altrimenti $resulting_arraysarà un valore booleano non l'array che ti aspettavi.
El Yobo

3

Utilizzando lo stesso metodo di @mvpetrovich, puoi utilizzare la versione abbreviata di un array per abbreviare la sintassi.

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

Riferimenti:

PHP: array_merge ()

PHP: Arrays - Manuale

A partire da PHP 5.4 puoi anche usare la sintassi short array, che sostituisce array () con [].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.