Jak scalić dwie tablice (jedną z ciągiem => parami wartości, a drugą z int => parami wartości), zachowując klucze ciąg / int? Żadne z nich nigdy się nie nakłada (ponieważ jeden ma tylko łańcuchy, a drugi tylko liczby całkowite).
Oto mój obecny kod (który nie działa, ponieważ array_merge ponownie indeksuje tablicę za pomocą kluczy całkowitych):
// get all id vars by combining the static and dynamic
$staticIdentifications = array(
Users::userID => "USERID",
Users::username => "USERNAME"
);
// get the dynamic vars, formatted: varID => varName
$companyVarIdentifications = CompanyVars::getIdentificationVarsFriendly($_SESSION['companyID']);
// merge the static and dynamic vars (*** BUT KEEP THE INT INDICES ***)
$idVars = array_merge($staticIdentifications, $companyVarIdentifications);
php
arrays
array-merge
Garrett
źródło
źródło
array( 123 => "VALUE123" )
naarray( 0 => "VALUE123" )
assert(array(0=>0,1=>1) === array_merge(array('9'=>0), array('9'=>1)))
Odpowiedzi:
Możesz po prostu „dodać” tablice:
źródło
print_r([2 => 56] + [2 => 30]);
kończyArray ( [2] => 56 )
. Tak więc utrzymuje lewą stronę zgodnie z opisem. To jest jak z PHP 7.1.19, działa na repl.it .Biorąc pod uwagę, że masz
Wykonanie
$merge = $replacement + $replaced;
spowoduje:Pierwsza tablica z sumy będzie miała wartości na końcowym wyjściu.
Wykonanie
$merge = $replaced + $replacement;
spowoduje:źródło
$allValues += $newValues;
.$merge = $replacement + $replaced;
spowoduje:Array ( [4] => value2 [6] => value3 [1] => value1 )
Chociaż to pytanie jest dość stare, chcę tylko dodać kolejną możliwość wykonania scalenia przy zachowaniu kluczy.
Oprócz dodawania klucza / wartości do istniejących tablic za pomocą
+
znaku, który możesz zrobićarray_replace
.Wynik będzie:
Te same klucze zostaną zastąpione przez drugą tablicę.
Istnieje również opcja
array_replace_recursive
, która robi to również dla podrzędnych.Przykład na żywo na 3v4l.org
źródło
Dwie tablice można łatwo dodać lub połączyć bez zmiany pierwotnego indeksowania przez operatora + . Będzie to bardzo pomocne w rozwijaniu laravela i rozwijania programu do znakowania kodu.
Dane wyjściowe będą:
źródło
Wypróbuj funkcje array_replace_recursive lub array_replace
http://php.net/manual/en/function.array-replace-recursive.php
źródło