array_column($rows, $column) retorna o valor de $column de cada linha numa lista de linhas. Ele transforma uma tabela de registros num array simples de um campo, que é o que você precisa antes de implode, in_array, array_sum ou array_search.
As linhas podem vir de qualquer lugar: uma resposta JSON decodificada, um arquivo CSV ou uma consulta ao banco que retornou um array de arrays associativos.
Usar a chave de índice para montar pares chave e valor
O terceiro argumento indica um campo cujo valor vira a chave de cada resultado. array_column($users, 'name', 'id') é o jeito comum de montar uma consulta de id para nome, por exemplo para uma lista <select>.
Se duas linhas tiverem o mesmo valor de índice, a linha posterior sobrescreve a anterior.
Indexar linhas inteiras pelo id com null
Passe null como coluna para manter cada linha completa, com a chave trocada pelo campo de índice. Procurar uma linha pelo id vira então um acesso direto pela chave em vez de um loop.
Monte o índice uma vez e cada consulta depois disso é instantânea, o que importa quando você procura muitos ids num loop.
Encontrar uma linha com array_column e array_search
Para descobrir qual linha tem determinado valor, busque na coluna e use a posição retornada. Verifique o resultado com !== false, porque uma correspondência na primeira linha retorna 0.
Isso depende de $users ter as chaves 0, 1, 2, porque o array_column retorna uma lista. Se o array foi filtrado e tem buracos, chame array_values($users) antes. A página sobre array_search explica em detalhe a armadilha do false e do 0.
Somar, contar ou tirar a média de uma coluna
O array_column combina bem com as funções de matemática: extraia o campo e depois some.
Para um valor calculado a partir de vários campos, como quantidade vezes preço, a ferramenta é o array_map, como na última linha.
array_column com objetos
Com uma lista de objetos, o array_column lê propriedades públicas. Propriedades privadas e protegidas não ficam visíveis para ele.
A segunda chamada retorna um array vazio: password é privada, então todos os objetos são pulados.
Linhas sem o campo são puladas
O array_column não coloca um valor substituto para uma linha que não tem o campo. O resultado pode ser menor que a entrada, então as posições deixam de corresponder às linhas.
O primeiro resultado tem dois telefones e nenhuma pista de que Bob não tinha um. Com o nome como chave de índice, você vê de quem é cada número, que é a forma mais segura sempre que algumas linhas podem não ter o campo.
Perguntas frequentes
O que faz o array_column no PHP?
Ele recebe uma lista de linhas (arrays ou objetos) e retorna o valor de um campo de cada linha: array_column($users, 'email') dá um array simples de e-mails. Linhas que não têm o campo são puladas.
Como monto um array chave e valor a partir de linhas?
Passe o campo da chave como terceiro argumento: array_column($users, 'name', 'id') retorna [id => name, ...]. Passe null como segundo argumento, array_column($users, null, 'id'), para manter as linhas inteiras indexadas pelo id.
O que o array_column faz quando falta o campo numa linha?
Ele pula essa linha, então array_column($people, 'phone') pode retornar menos valores do que há linhas, e as posições deixam de corresponder. Adicione uma chave de índice, array_column($people, 'phone', 'name'), para ver de qual linha veio cada valor.
O array_column funciona com objetos?
Sim, com um array de objetos ele lê propriedades públicas, e também propriedades disponibilizadas via __get quando a classe define __isset. Propriedades privadas e protegidas são puladas.