Como remover um elemento de array em PHP: do iniciante ao profissional
\n\nImagine: você está criando uma loja virtual em PHP. Um pedido chega, o produto acabou no estoque — precisa removê-lo do carrinho. Ou você está processando uma lista de usuários e alguém decidiu excluir a conta. Em ambos os casos, você precisa remover um elemento de array em PHP.
\n\nParece simples, certo? Mas aqui mora uma armadilha para iniciantes. Usar apenas unset() pode quebrar o array: as chaves deixam de ser sequenciais e o loop foreach começa a dar surpresas. Não se preocupe, vamos explorar todas as armadilhas e aprender a remover elementos corretamente.
Este artigo é uma adaptação de uma pergunta popular no Stack Overflow, com milhares de visualizações. Traduzimos respostas complexas para uma linguagem simples e adicionamos exemplos da prática real.
\n\nO que é um array em PHP e por que limpá-lo?
\n\nUm array é um contêiner para dados. Imagine uma caixa com compartimentos, onde cada compartimento tem um número (índice) ou um nome (chave). Às vezes, os dados nesses compartimentos ficam desatualizados e precisam ser descartados.
\n\nEm PHP, existem dois tipos de arrays:
\n\n- \n
- Indexados — chaves: 0, 1, 2, 3... (como uma lista de produtos). \n
- Associativos — chaves: strings (exemplo:
"nome" => "João"). \n
E para cada tipo, existe uma forma "correta" de remoção. Se você misturar, terá um bug difícil de encontrar.
\n\n\n\n
Método #1: unset() — força bruta (e suas consequências)
\n\nA função unset($array[$chave]) é a maneira mais óbvia de remover um elemento de array em PHP. Ela simplesmente destrói a variável ou o elemento do array.
<?php\n$frutas = ['maçã', 'banana', 'cereja', 'tâmara'];\nunset($frutas[1]); // remove 'banana'\nprint_r($frutas);\n?>\n\nResultado:
\n\nArray\n(\n [0] => maçã\n [2] => cereja\n [3] => tâmara\n)\n\nObserve: o índice 1 desapareceu, mas os outros índices não foram reordenados. Agora você tem um array com um "buraco": 0, 2, 3. Se tentar percorrê-lo com um loop for usando $i = 0; $i < count($array); $i++, receberá um erro no índice 1, pois ele não existe mais.
Quando usar unset():
\n- \n
- Para arrays associativos (chaves são strings) — buracos não são um problema. \n
- Quando a ordem dos índices não é importante. \n
Quando não usar:
\n- \n
- Para arrays indexados, onde a sequência (0,1,2...) é essencial. \n
- Se você planeja serializar o array ou convertê-lo para JSON — buracos podem quebrar a lógica no lado do cliente. \n
\n\n
Método #2: array_splice() — remova e reindexe
\n\nSe você quer remover um elemento de array em PHP e manter os índices numéricos sequenciais, use array_splice(). Esta função não apenas remove, mas também "fecha" automaticamente o array.
<?php\n$frutas = ['maçã', 'banana', 'cereja', 'tâmara'];\narray_splice($frutas, 1, 1); // a partir do índice 1, remove 1 elemento\nprint_r($frutas);\n?>\n\nResultado:
\n\nArray\n(\n [0] => maçã\n [1] => cereja\n [2] => tâmara\n)\n\nOs índices voltaram a ser 0, 1, 2. Perfeito! array_splice() aceita três parâmetros:
- \n
- O array (passado por referência — o array original será modificado). \n
- O índice inicial. \n
- A quantidade de elementos a remover (se não especificado, remove até o final). \n
Bônus: esta função retorna os elementos removidos, então você pode salvá-los:
\n\n<?php\n$removido = array_splice($frutas, 1, 1);\necho "Removido: " . $removido[0]; // banana\n?>\n\nDesvantagem: funciona apenas com índices numéricos. Para arrays associativos, o <