PHP Básico

array_column no PHP: transformar lista de arrays em índice por ID

Chegaram 400 linhas do SELECT num array e o que eu preciso é a linha do id 22. Se a sua primeira ideia foi um foreach com break, segura: array_column($linhas, null, 'id') devolve o mesmo conteúdo indexado pelo id, e a busca vira $porId[22] — acesso direto, sem varrer o array.

As três formas de chamar

O terceiro parâmetro é o que quase ninguém usa: ele diz qual coluna vira a chave da saída. E o segundo aceita null desde o PHP 7.0, que é como você mantém a linha inteira em vez de só um campo.

$linhas = [
    ['id' => 10, 'nome' => 'Camiseta', 'preco' => 79.90],
    ['id' => 22, 'nome' => 'Caneca',   'preco' => 39.00],
];

array_column($linhas, 'nome');
// ['Camiseta', 'Caneca']

array_column($linhas, 'preco', 'id');
// [10 => 79.9, 22 => 39.0]

array_column($linhas, null, 'id');
// [10 => ['id' => 10, ...], 22 => ['id' => 22, ...]]

Funciona igual com array de objetos: desde o PHP 7.0 a função lê propriedade pública pelo nome, então dá para indexar uma lista de DTOs sem escrever laço. Propriedade privada ou protegida ela só alcança se a classe tiver __isset() e __get(); sem os dois, a linha é ignorada calada.

As duas armadilhas que apagam dados

A primeira: se a linha não tiver a coluna que você pediu, ela é descartada inteira, sem aviso e sem notice. A segunda: chave repetida sobrescreve — dois pedidos com o mesmo sku e um deles evapora.

$l = [['id' => 1], ['id' => 2, 'n' => 'b']];

var_export(array_column($l, 'n', 'id'));
// [2 => 'b']   a linha do id 1 sumiu

// guarda-chuva antes de confiar no índice
$porId = array_column($linhas, null, 'id');
if (count($porId) !== count($linhas)) {
    throw new RuntimeException('id duplicado no resultado');
}

Comparar os dois count custa nada e pega o caso feio antes dele virar relatório errado. Se os números não baterem, o que você precisa é agrupar por chave num foreach, e não indexar.

Post Recentes

UI component listing do Magento 2: grid do admin abre vazia

A grid do seu módulo monta o cabeçalho e não traz linha nenhuma. Registre a collection do UI component listing…

3 horas atrás

theme.json: fonte personalizada no tema de blocos do WordPress 6.9

Jogou o .woff2 em assets/fonts e a fonte não aparece no seletor de tipografia? Falta o bloco fontFamilies com fontFace…

1 dia atrás

setup:upgrade travado no Magento 2.4.8: destravar o lock e concluir

O setup:upgrade parou no meio de um módulo e a loja ficou em manutenção. Veja como liberar o processo, limpar…

2 dias atrás

CodeIgniter 4: Controller or its method is not found — arrumando a rota

A rota abre no Windows e devolve 404 no servidor Linux. Veja os três culpados: nome de arquivo com caixa…

3 dias atrás

Exportar dados pessoais no WordPress: atender o pedido LGPD do titular

Recebeu um pedido de acesso aos dados pessoais e o prazo está correndo? Use Ferramentas > Exportar dados pessoais e…

3 dias atrás

Desativar o 2FA do Magento 2 no ambiente local sem quebrar o admin

Cópia local do Magento pedindo código do autenticador e o e-mail de setup não chega. Desligue os dois módulos de…

4 dias atrás