Diferença entre array_push () e $ array [] =

117

No manual do PHP, ( array_push ) diz ..

Se você usar array_push () para adicionar um elemento ao array, é melhor usar $ array [] = porque dessa forma não há sobrecarga de chamar uma função.

Por exemplo :

$arr = array();
array_push($arr, "stackoverflow");
print_r($arr);

vs

$arr[] = "stackoverflow";
print_r($arr);

Não entendo porque é que existe uma grande diferença.

l2aelba
fonte
8
Uma é uma chamada de função, a outra não. Exatamente o que está mencionado na caixa.
KingCrunch
1
Uma é a chamada de função, conforme mencionado acima, que significa o uso de alguns recursos para alternar o controle de / para a chamada de função (resultando assim em processamento de overhead). Considerando que, posteriormente, está simplesmente atribuindo um novo elemento na matriz imediatamente.
Ghazanfar Mir
2
esta questão me economizou muito tempo empurrando para matrizes :)
RozzA

Respostas:

151

Quando você chama uma função em PHP (como array_push()), há sobrecargas para a chamada, pois o PHP precisa pesquisar a referência da função, encontrar sua posição na memória e executar qualquer código que definir.

Usar $arr[] = 'some value';não requer uma chamada de função e implementa a adição diretamente na estrutura de dados. Assim, ao adicionar muitos dados, o uso é muito mais rápido e eficiente em termos de recursos $arr[].

BenM
fonte
3
e se tal notação "$ arr [] = 'algum valor';" resume-se à chamada de função?
Tebe
1
@gekannt Como isso aconteceria? Você quer dizer se 'algum valor' em seu comentário é um encerramento? Isso armazenaria a referência do fechamento na matriz. Se você quer dizer que 'algum valor' é uma função que é chamada, ele adicionaria tudo o que a função retornar.
Kirkland
Operadores @Kirkland são apenas funções com uma sintaxe alternativa na maioria das linguagens semelhantes a C, não sou nenhum especialista em PHP, mas posso imaginar que eles implementaram operadores da mesma maneira, já que é um dialeto C.
Kevin
1
@ Kevin: tu concordo com você e tenho certeza que há uma função por trás da sintaxe alternativa, não é a mencionada acima, pois vejo o seguinte comentário na documentação do php: "Se você usar array_push () para adicionar um elemento para o array é melhor usar $ array [] = porque, dessa forma, não há sobrecarga de chamar uma função. " não tenho tempo agora para ver exatamente o que está por trás disso, pois o termo de pesquisa é um pouco confuso para os mecanismos de pesquisa :)
jnhghy - Alexandru Jantea
Existe alguma evidência real que $arr[] = valueseja mais rápida? Tentando imaginar por que o compilador trataria o código de maneira diferente.
c ..
44

Você pode adicionar mais de 1 elemento de uma vez à matriz usando array_push,

por exemplo array_push($array_name, $element1, $element2,...)

Onde $ element1, $ element2, ... são elementos a serem adicionados ao array.

Mas se você quiser adicionar apenas um elemento de cada vez, outro método (ou seja, usando $ array_name []) deve ser preferido.

Sujit Singh
fonte
É uma má prática combinar os dois conforme necessário ao longo de um projeto?
PBwebD
1
@ testing123 Absolutamente não. É uma boa prática usar a solução mais eficiente disponível à mão, a menos que prejudique seriamente a legibilidade, compatibilidade, etc (ou se você precisar obedecer a certos guias de estilo).
Chris Kraszewski de
15

A diferença está na linha abaixo para "porque dessa forma não há sobrecarga na chamada de uma função."

array_push()irá gerar um aviso se o primeiro argumento não for uma matriz. Isso difere do $var[]comportamento em que uma nova matriz é criada.

Baig
fonte
4
Eu não disse que era um motivo. Na pergunta, a diferença foi feita e essa também é a diferença
Baig 09/01/2013
7

Você deve sempre usar, $array[]se possível, porque como a caixa indica, não há sobrecarga para a chamada de função. Portanto, é um pouco mais rápido do que a chamada de função.

Benjamin Paap
fonte
4

array_push - coloca um ou mais elementos no final da matriz

Anote as palavras " um ou mais elementos no final " para fazer isso usando $arr[]você teria que obter o tamanho máximo do array

ianace
fonte
Re "para fazer isso usando $ arr [] você teria que obter o tamanho máximo do array" . Não, você está confuso $arr[...index...] = $value;com o que está sendo discutido aqui, que é $arr[] = $value;. Não é necessário saber o tamanho ou a matriz para empurrar no final. Vários elementos seriam simplesmente várias chamadas: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve
2

explicar: 1. o primeiro declara a variável no array.

2. o segundo método array_push é usado para empurrar a string na variável de array.

3.finalmente, ele imprimirá o resultado.

4. o segundo método é armazenar diretamente a string no array.

5. os dados são impressos nos valores da matriz usando o método print_r.

esses dois são iguais

Saravana Kumar
fonte
1

ambos são iguais, mas array_push faz um loop em seu parâmetro que é um array e executa $ array [] = $ element

Sara
fonte
0

Eu sei que esta é uma resposta antiga, mas pode ser útil para os outros saberem que outra diferença entre as duas é que se você tiver que adicionar mais de 2/3 valores por loop a uma matriz, é mais rápido usar:

     for($i = 0; $i < 10; $i++){
          array_push($arr, $i, $i*2, $i*3, $i*4, ...)
     }

ao invés de:

     for($i = 0; $i < 10; $i++){
         $arr[] = $i;
         $arr[] = $i*2;
         $arr[] = $i*3;
         $arr[] = $i*4;
         ...
     }

editar- Esqueci de fechar o colchete para o forcondicional

Antoniu Livadariu
fonte
1
Eu me pergunto como isso se compara a array_merge. Ex for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Eu especulo que array_push ainda é um pouco mais rápido do que isso.
ToolmakerSteve
0

Ninguém disse, mas array_push apenas empurra um elemento para o END OF THE ARRAY, onde $ array [index] pode inserir um valor em qualquer índice fornecido. Grande diferença.

Marco
fonte
A questão era a "Diferença entre array_push () e $ array [] =" o que eu disse é uma diferença. Um grande!
Marco
1
Eu respeitosamente discordo. Você está descrevendo $array[index] = , o que é uma operação diferente de $array[] = .... A questão fornece duas partes do código e pergunta por que haveria uma diferença significativa [de desempenho] entre elas. A questão significa literalmente $array[] = ..., que é um idioma específico do php, que não envolve um índice. array + index resolve um problema diferente, produz um código diferente e tem uma compensação diferente.
ToolmakerSteve