Qual é uma maneira fácil de colocar um elemento no meio de uma matriz PHP?

StackOverflow https://stackoverflow.com/questions/620709

  •  05-07-2019
  •  | 
  •  

Pergunta

Digamos que você tenha uma matriz indexada de 10 elementos e deseja colocar um elemento em algum lugar no meio (digamos o índice 3). Então eu quero ter o restante da mudança de matriz e, portanto, ter 11 elementos de comprimento. Existe uma maneira fácil de fazer isso?

Estou surpreso que não exista put() função ou algo assim.

Eu sei que seria fácil o suficiente fazer isso com uma combinação de array_splice e array_merge Mas eu estava me perguntando se havia uma maneira mais fácil.

Foi útil?

Solução

Array_splice () faz isso

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");

Outras dicas

Infelizmente, sua melhor aposta é o que você descreveu em sua postagem.

Se você usar o Array_splice (), o PHP ainda precisará copiar metade da matriz para fazer a inserção, o que será um desempenho de desempenho para grandes tamanhos de matriz. Talvez você deva estar usando uma lista ou datraestrutura de árvore?

A única vez em que precisava inserir no meio de uma matriz foi quando eu estava fazendo alguma operação que é substancialmente semelhante ao tipo de inserção. Talvez você queira armazenar os itens não classificados em uma matriz e depois classificá -los depois de adicionar todos eles?

Atualmente, nenhuma função PHP pode lidar com isso. Não é muito difícil preparar o seu próprio, no entanto:

function array_insert(&$array, $insert, $position) {
    $c = count($array);
    $slice = array_merge($insert, array_slice($array, $position));
    array_splice($array, $position, $c, $slice);
}

$array = array('a','b','d','e');
print_r($array);
array_insert($array, array('c'), 2);
print_r($array);

Vai resultar em:

Array
(
    [0] => a
    [1] => b
    [2] => d
    [3] => e
)
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

Você provavelmente pode adicionar verificações se a posição é maior que a matriz, a inserção não é uma matriz etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top