Função array_filter PHP

Resumo : neste tutorial, você aprenderá como usar a array_filter()função PHP para filtrar elementos de um array usando uma função de retorno de chamada.

Introdução à função array_filter() do PHP

Quando você deseja filtrar elementos de um array , você frequentemente itera sobre os elementos e verifica se o array resultante deve incluir cada elemento.

O exemplo a seguir usa a foreachinstrução para iterar os elementos da $numbersmatriz e filtrar os números ímpares:

<?php

$numbers = [1, 2, 3, 4, 5];
$odd_numbers = [];

foreach ($numbers as $number) {
	if ($number % 2 === 1) {
		$odd_numbers[] = $number;
	}
}

print_r($odd_numbers);Linguagem de código:  HTML, XML  ( xml )

Saída:

Array
(
    [0] => 1
    [1] => 3
    [2] => 5
)Linguagem de código:  PHP  ( php )

A array_filter()função torna o código menos detalhado e mais expressivo:

<?php

$numbers = [1, 2, 3, 4, 5];

$odd_numbers = array_filter(
	$numbers,
	function ($number) {
		return $number % 2 === 1;
	}
);

print_r($odd_numbers);Linguagem de código:  HTML, XML  ( xml )

A partir do PHP 7.4, você pode usar a função arrow em vez da função anônima assim:

<?php

$numbers = [1, 2, 3, 4, 5];

$odd_numbers = array_filter(
	$numbers,
	fn ($number) => $number % 2 === 1
);

print_r($odd_numbers);
Linguagem de código:  HTML, XML  ( xml )

A array_filter()função permite filtrar elementos de um array usando uma função de retorno de chamada.

O seguinte ilustra a sintaxe da array_filter()função:

array_filter ( 
    array $array , 
    callable|null $callback = null , 
    int $mode = 0 
) : arrayLinguagem de código:  PHP  ( php )

A array_filter()função itera sobre os elementos de $arraye passa cada elemento para a $callbackfunção. Se a função de retorno de chamada retornar true, a array_filter()função incluirá o elemento na matriz de resultados.

Exemplos de funções PHP array_filter()

Vamos dar alguns exemplos para entender array_filter()melhor a função.

1) Exemplo básico de função array_filter()

Para filtrar todos os números ímpares da $numbersmatriz, você usa a array_filter()função da seguinte forma:

<?php

$numbers = [1, 2, 3, 4, 5];

$even_numbers = array_filter(
	$numbers,
	function ($number) {
		return $number % 2 === 0;
	}
);

print_r($even_numbers);Linguagem de código:  HTML, XML  ( xml )

2) Usando callback como método de uma classe

Além de um retorno de chamada, você pode passar um método de uma classe para a array_filter()função assim:

array_filter($items,[$instance,'callback']);Linguagem de código:  PHP  ( php )

Por exemplo:

class Odd
{
    public function isOdd($num)
    {
        return $num % 2 === 1;
    }
}
Linguagem de código:  PHP  ( php )

A Oddclasse possui um método isOdd()que retorna truese o argumento for um número ímpar; caso contrário, ele retorna false.

Para usar o isOdd()método como retorno de chamada da array_filter()função, você usa o seguinte formato:

<?php

class Odd
{
	public function isOdd($num)
	{
		return $num % 2 === 1;
	}
}

$numbers = [1, 2, 3, 4, 5];
$odd_numbers = array_filter(
	$numbers,
	[new Odd(), 'isOdd']
);

print_r($odd_numbers);Linguagem de código:  HTML, XML  ( xml )

Se você tem uma classe que possui um método estático , você passa o método estático como retorno de chamada da array_filter()função:

array_filter($array, ['Class','callback']);Linguagem de código:  PHP  ( php )

Por exemplo:

<?php

class Even
{
    public static function isEven($num)
    {
        return $num % 2 === 0;
    }
}Linguagem de código:  HTML, XML  ( xml )

A Evenclasse possui um método estático isEven()que retorna truese o argumento for par; caso contrário, ele retorna false.

O seguinte usa o isEven()método estático como retorno de chamada da array_fitler()função:

$even_numbers = array_filter($numbers, ['Even','isEven']);Linguagem de código:  PHP  ( php )

A partir do PHP 5.3, se uma classe implementa o __invoke() método mágico , você pode usá-lo como chamável. Por exemplo:

<?php

class Positive
{
    public function __invoke($number)
    {
        return $number  > 0;
    }
}Linguagem de código:  HTML, XML  ( xml )

Neste exemplo, a Positiveclasse possui o __invoke()método mágico que retorna truese o argumento for positivo; caso contrário, retornará falso.

Você pode passar uma instância da Positiveclasse para a array_filter()função para incluir apenas números positivos na matriz de resultados.

<?php

class Positive
{
	public function __invoke($number)
	{
		return $number > 0;
	}
}

$numbers = [-1, -2, 0, 1, 2, 3];
$positives = array_filter($numbers, new Positive());

print_r($positives);Linguagem de código:  HTML, XML  ( xml )

Saída:

Array
(
    [3] => 1
    [4] => 2
    [5] => 3
)Linguagem de código:  PHP  ( php )

Passando elementos para a função de retorno de chamada

Por padrão, a array_filter()função passa o valor de cada elemento da matriz para a função de retorno de chamada para filtragem.

Às vezes, você deseja passar a chave, e não o valor, para a função de retorno de chamada. Neste caso, você pode passar ARRAY_FILTER_USE_KEYcomo terceiro argumento da array_filter()função. Por exemplo:

<?php

$inputs = [
	'first' => 'John',
	'last' => 'Doe',
	'password' => 'secret',
	'email' => '[email protected]'
];

$filtered = array_filter(
	$inputs,
	fn ($key) => $key !== 'password',
	ARRAY_FILTER_USE_KEY
);

print_r($filtered);Linguagem de código:  HTML, XML  ( xml )

Saída:

Array
(
    [first] => John
    [last] => Doe
    [email] => [email protected]
)Linguagem de código:  PHP  ( php )

Neste exemplo, $filteredcontém todos os elementos do $inputsarray, exceto o elemento cuja chave é password.

Para passar a chave e o valor do elemento para a função de retorno de chamada, você passa o  ARRAY_FILTER_USE_BOTHvalor como o terceiro argumento da array_filter()função. Por exemplo:

<?php

$inputs = [
	'first' => 'John',
	'last' => 'Doe',
	'password' => 'secret',
	'email' => ''
];

$filtered = array_filter(
	$inputs,
	fn ($value, $key) => $value !== '' && $key !== 'password',
	ARRAY_FILTER_USE_BOTH
);

print_r($filtered);
Linguagem de código:  HTML, XML  ( xml )

Saída:

Array
(
    [first] => John
    [last] => Doe
)Linguagem de código:  PHP  ( php )

Neste tutorial, você aprendeu como usar a array_filter()função PHP para filtrar elementos de um array usando um retorno de chamada.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *