$test = array('hi');
$test += array('test','oh');
var_dump($test);
Cosa significa "+
" per array in PHP?+ operatore per array in PHP?
$test = array('hi');
$test += array('test','oh');
var_dump($test);
Cosa significa "+
" per array in PHP?+ operatore per array in PHP?
Citando dal PHP Manual on Language Operators
L'operatore + restituisce la matrice destra allegato al reticolo sinistro; per le chiavi che esistono in entrambi gli array, verranno utilizzati gli elementi dell'array di sinistra e gli elementi corrispondenti della matrice di destra verranno ignorati.
Quindi, se si fa
$array1 = ['one', 'two', 'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz'];
print_r($array1 + $array2);
otterrete
Array
(
[0] => one // preserved from $array1 (left-hand array)
[1] => two // preserved from $array1 (left-hand array)
[foo] => bar // preserved from $array1 (left-hand array)
[2] => five // added from $array2 (right-hand array)
)
Così la logica della +
è equivalente al seguente frammento:
$union = $array1;
foreach ($array2 as $key => $value) {
if (false === array_key_exists($key, $union)) {
$union[$key] = $value;
}
}
Se siete interessati nei dettagli dell'attuazione del livello C. testa zione a
nota, che +
è diverso da come array_merge()
unirebbe gli array:
print_r(array_merge($array1, $array2));
darebbe
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => baz // overwritten from $array2
[2] => three // appended from $array2
[3] => four // appended from $array2
[4] => five // appended from $array2
)
Vedere pagine collegate per altri esempi.
È l'ordine delle chiavi dopo l'operazione '+' garantita dalle ** specifiche **? – Pacerier
@Pacerier PHP prodotto da php.net non ha una specifica formale, ma entrambe le chiamate '+' e 'array_merge'' zend_hash_merge' sono sotto il cofano. Questo è anche previsto, poiché gli array PHP sono implementati come mappe hash ordinate. – bishop
@bishop, Non è il manuale di php.net le specifiche per PHP? – Pacerier
Aggiungerà il nuovo array al precedente.
Questo operatore utilizza l'unione di due array (come array_merge, con la differenza che con le chiavi duplicate array_merge vengono sovrascritte).
La documentazione per gli operatori di array è here.
Una parola di cautela per i principianti qui, il risultato dell'operazione è ** nullo ** se uno degli array è ** nullo **. Ad alcuni potrebbe non interessare questo presupposto poiché si tratta di un'operazione di unione, il risultato sarà l'array corretto (non nullo) se uno di essi è nullo. Ma ciò è vero se uno degli array è un array ** vuoto **. –
Quindi, come buona pratica, penso che dovremmo inizializzare gli array di input come array vuoti. Voi ragazzi cosa dite? –
L'esempio migliore che ho trovato per l'utilizzo di questo è in un array di configurazione.
$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"[email protected]");
$config = $user_vars + $default_vars;
Il $default_vars
, come suggerisce, è la matrice di valori predefiniti. L'array $user_vars
sovrascriverà i valori definiti in $default_vars
. Eventuali valori mancanti in $user_vars
sono ora i valori predefiniti vars da $default_vars
.
Questo sarebbe print_r
come:
Array(2){
"username" => "John Doe",
"email" => "[email protected]"
}
Spero che questo aiuta!
$var1 = "example";
$var2 = "test";
$output = array_merge((array)$var1,(array)$var2);
print_r($output);
Array ([0] => esempio [1] => test)
Questo thread menziona alcune volte come array_merge() NON è congruente. – doublejosh
@doublejosh, "congruente"? Senso? – Pacerier
Non sono la stessa cosa. – doublejosh
attento con i tasti numerici, se devono essere conservati o se non si vuole perdere nulla
$a = array(2 => "a2", 4 => "a4", 5 => "a5");
$b = array(1 => "b1", 3 => "b3", 4 => "b4");
unione
print_r($a+$b);
Array
(
[2] => a2
[4] => a4
[5] => a5
[1] => b1
[3] => b3
)
merge
print_r(array_merge($a, $b));
Array
(
[0] => a2
[1] => a4
[2] => a5
[3] => b1
[4] => b3
[5] => b4
)
͏ + 1, buona presa. – Pacerier
L'operatore +
produce gli stessi risultati di array_replace(). Tuttavia, poiché gli argomenti dell'operatore sono invertiti, anche l'ordinamento dell'array risultante può essere diverso.
Ampliando altro esempio a questa pagina:
$array1 = array('one', 'two', 'foo' => 'bar');
$array2 = array('three', 'four', 'five', 'foo' => 'baz');
print_r($array1 + $array2);
print_r(array_replace($array2, $array1)); //note reversed argument order
uscite:
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => bar // preserved from $array1
[2] => five // added from $array2
)
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[2] => five // added from $array2
[foo] => bar // preserved from $array1
)
L'ordine di '+' è garantito dalle specifiche? Che dire di 'array_replace'? – Pacerier
- Array nonché l'uso del trattamento di tutte matrice come matrice associativa.
- Quando il conflitto tasto durante più, il valore a sinistra (precedente) siano mantenute
inserisco il codice qui sotto per rendere le cose chiare.
$a + $b = array_plus($a, $b)
function array_plus($a, $b){
$results = array();
foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
return $results;
}
@ L'esecuzione del codice di Tamlyn sembra dimostrare che il reclamo * "l'operazione array plus considera tutto l'array come array associato" * è errato. – Pacerier
Il codice di Tamlyn ha dimostrato che ho ragione –
ho notato la tua domanda ha avuto '+ =' e la risposta accettata aveva '+'. Dai miei test sembrano comportarsi allo stesso modo. – user151841
La [documentazione] (http://php.net/manual/en/language.operators.array.php) riassume abbastanza bene – artfulrobot
possibile duplicato di [Riferimento: cosa significa questo simbolo in PHP?] (Http: //stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) –