Como mesclar duas matrizes (uma com pares string => value e outra com pares int => value) mantendo as chaves string / int? Nenhum deles se sobrepõe (porque um possui apenas cadeias e o outro possui apenas números inteiros).
Aqui está o meu código atual (que não funciona, porque array_merge está re-indexando a matriz com chaves inteiras):
// 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
fonte
fonte
array( 123 => "VALUE123" )
paraarray( 0 => "VALUE123" )
assert(array(0=>0,1=>1) === array_merge(array('9'=>0), array('9'=>1)))
Respostas:
Você pode simplesmente 'adicionar' as matrizes:
fonte
print_r([2 => 56] + [2 => 30]);
cedeArray ( [2] => 56 )
. Portanto, ele mantém o lado esquerdo, conforme especificado. Esta é a partir do PHP 7.1.19, rodando em repl.it .Considerando que você tem
Doing
$merge = $replacement + $replaced;
produzirá:A primeira matriz da soma terá valores na saída final.
Doing
$merge = $replaced + $replacement;
produzirá:fonte
$allValues += $newValues;
.$merge = $replacement + $replaced;
resultará: #Array ( [4] => value2 [6] => value3 [1] => value1 )
Embora essa pergunta seja bastante antiga, eu só quero acrescentar outra possibilidade de mesclar, mantendo as chaves.
Além de adicionar valores / chaves às matrizes existentes usando o
+
sinal, você pode fazer umarray_replace
.O resultado será:
As mesmas chaves serão substituídas pela última matriz.
Também existe um
array_replace_recursive
, que faz isso para subarrays.Exemplo ao vivo em 3v4l.org
fonte
Duas matrizes podem ser facilmente adicionadas ou unidas sem perseguir sua indexação original pelo operador + . Isso será muito útil no laravel e no codeigniter selecione o menu suspenso.
A saída será:
fonte
Experimente as funções array_replace_recursive ou array_replace
http://php.net/manual/en/function.array-replace-recursive.php
fonte