Vamos imaginar que temos duas matrizes:
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
$array_2 = array(
'zero' => '0',
'one' => '1',
'two' => '2',
'three' => '3',
);
Agora, gostaria de inserir o array('sample_key' => 'sample_value')
terceiro elemento de cada matriz. Como eu posso fazer isso?
Respostas:
array_slice()
pode ser usado para extrair partes da matriz, e o operador da matriz de+
união ( ) pode recombinar as partes.Este exemplo:
dá:
fonte
+
não deve ser usado! Use emarray_merge
vez disso! Porque se os índices são inteiros (matriz normal, não hash),+
não funcionarão conforme o esperado !!!array_merge
O comportamento de teclas numéricas não é apropriado para esta pergunta.count($array)-3
você pode simplesmente especificar nulo para o mesmo efeito. Além disso, usararray_merge
o TMS sugerido não exigirá o uso de um índice exclusivo. EXEMPLO: Adicione "novo valor" a uma matriz existente:$b = array_merge( array_slice( $a, 0, 1, true ), array( 'new-value' ), array_slice( $a, 1, null, true ) );
+
vs.array_merge
. Se você deseja inserir itens em uma matriz numérica, não deve usá-+
la porque provavelmente não corresponderá às suas expectativas. Mas você também não deve usararray_merge
; para matrizes numéricas, todo esse problema é resolvido com aarray_splice
função Para matrizes associativas ou mistas, você provavelmente não deseja que as chaves numéricas sejam indexadas novamente, portanto, o uso+
é totalmente apropriado.Para sua primeira matriz, use
array_splice()
:resultado:
para o segundo não há pedido, então você só precisa fazer:
E ordene as chaves do jeito que você quiser.
fonte
código:
exemplo:
Pode não parecer realmente perfeito, mas funciona.
fonte
Aqui está uma função simples que você poderia usar. Basta conectar e reproduzir.
Isso é Inserir por índice, não por valor.
você pode optar por passar a matriz ou usar uma que você já declarou.
EDIT: Versão mais curta:
Agora você pode testar o código usando
E o resultado é:
fonte
fonte
Esta função suporta:
USO:
RESULTADOS:
fonte
Recentemente, escrevi uma função para fazer algo semelhante ao que parece que você está tentando, é uma abordagem semelhante à resposta do clasvdb.
Basicamente, ele é inserido em um ponto específico, mas evita a substituição deslocando todos os itens para baixo.
fonte
Se você não sabe que deseja inseri-lo na posição 3, mas conhece a chave que deseja inseri-lo depois, desenvolvi essa pequena função depois de ver esta pergunta.
Aqui está um violino do codepad para vê-lo em ação: http://codepad.org/5WlKFKfz
Nota: array_splice () teria sido muito mais eficiente que array_merge (array_slice ()), mas as chaves das matrizes inseridas seriam perdidas. Suspiro.
fonte
Abordagem mais limpa (com base na fluidez de uso e menos código).
Uso:
fonte
Solução mais simples, se você deseja inserir (um elemento ou matriz) após uma determinada chave:
Então, se você tem:
E execute:
Você terá:
fonte
Usar array_splice em vez de array_slice fornece uma menos chamada de função.
fonte
Eu faço isso como
fonte
Acabei de criar uma classe ArrayHelper que tornaria isso muito fácil para índices numéricos.
Exemplo:
Começando $ array:
Resultado:
fonte
Este é o melhor método para inserir o item na matriz em alguma posição.
fonte
Eu precisava de algo que pudesse fazer uma inserção antes, substituir, depois da chave; e adicione no início ou no final da matriz se a chave de destino não for encontrada. O padrão é inserir após a chave.
Nova função
Código de entrada
Resultado
fonte
Resposta muito simples de 2 cordas à sua pergunta:
Primeiro, insira qualquer coisa no seu terceiro elemento com array_splice e atribua um valor a esse elemento:
fonte
Esta é uma pergunta antiga, mas eu postei um comentário em 2014 e frequentemente volto a isso. Eu pensei em deixar uma resposta completa. Essa não é a solução mais curta, mas é fácil de entender.
Insira um novo valor em uma matriz associativa, em uma posição numerada, preservando chaves e preservando a ordem.
fonte
Não tão concreto quanto a resposta do Artefacto, mas baseado em sua sugestão de usar array_slice (), escrevi a seguinte função:
Recursos:
Exemplos de uso:
fonte
Caso você esteja apenas procurando inserir um item em uma matriz em uma determinada posição (com base na resposta @clausvdb):
fonte
Aqui está a minha versão:
fonte
maneira fácil .. usando
array_splice()
Resultado..
fonte
Esta é outra solução em
PHP 7.1
fonte
Você pode inserir elementos durante um loop foreach , já que esse loop funciona em uma cópia da matriz original, mas é necessário acompanhar o número de linhas inseridas (eu chamo isso de "inchaço" neste código):
Obviamente, você pode generalizar essa idéia de "inchaço" para lidar com inserções e exclusões arbitrárias durante o loop foreach.
fonte