Removendo elemento de array em PHP: guia simples para iniciantes

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

Como remover um elemento de array em PHP: do iniciante ao profissional

\n\n

Imagine: 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\n

Parece 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.

\n\n

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\n

O que é um array em PHP e por que limpá-lo?

\n\n

Um 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\n

Em 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
\n\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\n

A 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.

\n\n
<?php\n$frutas = ['maçã', 'banana', 'cereja', 'tâmara'];\nunset($frutas[1]); // remove 'banana'\nprint_r($frutas);\n?>
\n\n

Resultado:

\n\n
Array\n(\n    [0] => maçã\n    [2] => cereja\n    [3] => tâmara\n)
\n\n

Observe: 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.

\n\n

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
\n\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
\n\n

Método #2: array_splice() — remova e reindexe

\n\n

Se 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.

\n\n
<?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\n

Resultado:

\n\n
Array\n(\n    [0] => maçã\n    [1] => cereja\n    [2] => tâmara\n)
\n\n

Os índices voltaram a ser 0, 1, 2. Perfeito! array_splice() aceita três parâmetros:

\n
    \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
\n\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\n

Desvantagem: funciona apenas com índices numéricos. Para arrays associativos, o <

Blogs

Book Recommendations