Vamos supor que eu tenha a seguinte matriz multidimensional (recuperada do MySQL ou de um serviço):
array(
array(
[id] => xxx,
[name] => blah
),
array(
[id] => yyy,
[name] => blahblah
),
array(
[id] => zzz,
[name] => blahblahblah
),
)
Podemos obter um array de id
s em uma chamada de função php " embutida "? ou uma linha de código?
Estou ciente do loop tradicional e recebo o valor, mas não preciso disso:
foreach($users as $user) {
$ids[] = $user['id'];
}
print_r($ids);
Talvez alguns array_map()
e call_user_func_array()
possam fazer a mágica.
foreach($users as $user) {$ids[] = $user['id'];}
em uma linha! mas você sabe o que quero dizer / preciso :-)Respostas:
Desde o php 5.5, você pode usar
array_column
:Esta é a opção preferida em qualquer projeto moderno. No entanto, se você deve suportar php> 5.5, existem as seguintes alternativas:
Desde o php 5.3, você pode usar
array_map
com uma função anônima, como esta:Antes (Tecnicamente php 4.0.6+) , você deve criar uma função anônima com
create_function
:fonte
function ($ar) {return $ar['id'];}
valor de retorno da chave, isso seria incrível! :-)['ball' => ['golf' => 7, 'basket' => 5, 'soccer' => 6], 'shuttle' => ['badminton' => 1]]
.array_map
com uma função de seta:$ids = array_map(fn ($ar) => $ar['id'], $users);
PHP 5.5+
Iniciando o PHP5.5 + você tem array_column () disponível para você, o que torna todos os itens abaixo obsoletos.
PHP 5.3+
$ids = array_map(function ($ar) {return $ar['id'];}, $users);
A solução @phihag funcionará perfeitamente no PHP a partir do PHP 5.3.0, se você precisar de suporte antes disso, você precisará copiar esse wp_list_pluck.
PHP <5.3
Wordpress 3.1+No Wordpress existe uma função chamada wp_list_pluck Se você estiver usando o Wordpress que resolve seu problema.
PHP <5.3Se você não estiver usando o Wordpress , como o código é open source, você pode copiar e colar o código em seu projeto (e renomear a função para algo de sua preferência, como array_pick). Veja a fonte aqui
fonte
Se
id
for a primeira chave na matriz, isso fará:Você não deve necessariamente confiar nisso. :)
fonte
Você também pode usar
array_reduce()
se preferir uma abordagem mais funcionalPor exemplo:
Ou se você gosta de ser chique,
Este e todos os métodos acima se repetem nos bastidores;)
fonte