2009-09-03 8 views
89

E 'possibile anteporre un array associativo a chiave letterale => coppie di valori? So che array_unshift() funziona con i tasti numerici, ma spero in qualcosa che funzioni con le chiavi letterali.L'array associativo di prft PHP con chiavi letterali?

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

risposta

172

Non puoi semplicemente fare:

$resulting_array = $array2 + $array1; 

?

+13

Vedere anche array_merge() e la sua differenza dall'uso dell'operatore +: http://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 che cosa non funzionava prima. Grazie per la risposta. –

+1

@ Havenard: Grazie per le informazioni aggiuntive. –

4

@Cleus è azzeccato. Giusto per aggiungere, se l'ordinamento degli elementi nelle matrici di ingresso sono ambigue, ed è necessario l'array finale da ordinare, si potrebbe desiderare di ksort:

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

@karim: È utile, grazie. –

+4

Come nota tarda, 'ksort' restituisce booleano, quindi quanto sopra deve essere fatto come due dichiarazioni non uno, ad es. '$ a = $ array1 + $ array2; ksort ($ a); ', altrimenti' $ risultante_array' sarà un valore booleano non l'array che si aspettava. –

13

Nella tua situazione, si desidera utilizzare array_merge ():

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

anteporre un singolo valore, per un array associativo, invece di array_unshift(), utilizzare ancora array_merge():

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

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

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

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 i tasti numerici.

Problemi correlati