A mágica do contêiner vazio: como fazer o PHP trabalhar para você
\n\nImagine: 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\nNeste 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á!
A pergunta mais comum: como adicionar um elemento?
\n\nSe 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\nEste código exibirá:
\n\nArray\n(\n [0] => primeiro elemento\n [1] => segundo elemento\n)\n\nFunciona? Sim. Mas por quê? Vamos entender o que o operador [] realmente faz.
Operador $arr[] = $value: rápido e elegante
\n\nQuando 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).
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
Dica: use $arr[] = ... sempre que precisar adicionar um elemento ao final. É rápido, legível e não requer importação de funções.
array_push(): quando você precisa adicionar vários elementos de uma vez
\n\nO segundo método popular é a função array_push():
<?php\n$myArray = [];\narray_push($myArray, 'primeiro', 'segundo', 'terceiro');\nprint_r($myArray);\n?>\n\nO 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_insertpara 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
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 [].
Array vazio e chaves: e se as chaves não forem numéricas?
\n\nE 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\nAqui 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.
Mas cuidado: se você acidentalmente escrever $user[] = 'valor' próximo a um array associativo, o PHP adicionará uma chave numérica