Adicionar elementos a um array vazio em PHP: o que acontece "por baixo dos panos"?

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

A mágica do contêiner vazio: como fazer o PHP trabalhar para você

\n\n

Imagine: você está escrevendo um script em PHP e precisa coletar dados — por exemplo, IDs de produtos de um carrinho. Você cria um array vazio e, em um loop, adiciona elementos a ele. Parece simples, certo? Mas é exatamente neste momento — adicionar elementos a um array vazio em PHP — que surgem milhares de perguntas no Stack Overflow. Por quê? Porque iniciantes frequentemente confundem a sintaxe, e desenvolvedores experientes querem entender o que acontece "por baixo dos panos".

\n\n

Neste artigo, não vamos apenas mostrar como escrever o código corretamente. Vamos mergulhar no núcleo do PHP (Zend Engine), analisar a diferença entre $arr[] = $value e array_push(), e descobrir quais surpresas o PHP 8.1 reserva. Pronto? Vamos lá!

\n\n

A pergunta mais comum: como adicionar um elemento?

\n\n

Se você é iniciante, provavelmente a primeira coisa que vem à mente é escrever algo como:

\n\n
<?php\n$myArray = array(); // array vazio\n$myArray[] = 'primeiro elemento';\n$myArray[] = 'segundo elemento';\nprint_r($myArray);\n?>
\n\n

Este código exibirá:

\n\n
Array\n(\n    [0] => primeiro elemento\n    [1] => segundo elemento\n)
\n\n

Funciona? Sim. Mas por quê? Vamos entender o que o operador [] realmente faz.

\n\n

Operador $arr[] = $value: rápido e elegante

\n\n

Quando você escreve $arr[] = $value, o PHP não chama nenhuma função. Em vez disso, ele acessa diretamente a estrutura interna de dados do array (zend_array na terminologia do Zend Engine).

\n\n

O que acontece por baixo dos panos:

\n
    \n
  • O PHP verifica se o array existe. Se não, cria um novo (mas é sempre melhor inicializá-lo explicitamente: $arr = []).
  • \n
  • Adiciona o elemento ao final do array, atribuindo automaticamente a próxima chave numérica (0, 1, 2...).
  • \n
  • Se o array estava vazio — o primeiro elemento recebe a chave 0.
  • \n
  • Nenhum custo adicional de chamada de função. Esta é a maneira mais performática.
  • \n
\n\n

Dica: use $arr[] = ... sempre que precisar adicionar um elemento ao final. É rápido, legível e não requer importação de funções.

\n\n

array_push(): quando você precisa adicionar vários elementos de uma vez

\n\n

O segundo método popular é a função array_push():

\n\n
<?php\n$myArray = [];\narray_push($myArray, 'primeiro', 'segundo', 'terceiro');\nprint_r($myArray);\n?>
\n\n

O resultado será o mesmo. Mas existem nuances:

\n
    \n
  • array_push() recebe o array por referência e adiciona todos os valores passados ao final.
  • \n
  • Ela retorna o novo número de elementos no array (a partir do PHP 7.3).
  • \n
  • Por baixo dos panos: a função chama o procedimento interno zend_hash_next_index_insert para cada elemento. Isso significa que, se você estiver adicionando um único elemento, array_push() é um pouco mais lento que $arr[] = ..., devido ao custo da chamada de função.
  • \n
\n\n

Quando usar: apenas se precisar adicionar vários elementos de uma vez (2 ou mais). Para um único elemento — esqueça o array_push, use [].

\n\n

Array vazio e chaves: e se as chaves não forem numéricas?

\n\n

E se você quiser adicionar um elemento com uma chave específica? Por exemplo, um array associativo:

\n\n
<?php\n$user = [];\n$user['name'] = 'João';\n$user['age'] = 30;\n?>
\n\n

Aqui também é simples. O operador [] com uma chave dentro dos colchetes ($arr['key'] = value) funciona como uma atribuição. Se a chave não existir — ela é criada. Se existir — é sobrescrita.

\n\n

Mas cuidado: se você acidentalmente escrever $user[] = 'valor' próximo a um array associativo, o PHP adicionará uma chave numérica

Blogs

Book Recommendations