Esta Lib reúne algumas funções úteis para o tratamento de arrays
PHP 7.0+
Para rodar os testes unitários basta executar o seguinte comando no terminal
$ composer test
- map
- find
- filter
- even
- only
- last
- reduce
Todos os métodos recebem como parâmetro um Array
e um callbak
, que é uma função do tipo callable
. Essa função de callback receberá por padrão como parâmetro o valor do elemento atual do array e seu índice. Por exemplo:
function($value, $index) {
// sua implementação
}
O método map(...) é usado nos casos onde precisamos percorrer todo o array e alterar todos ou determinados elementos, de acordo com o callback passado como parâmetro. Abaixo é possível observar algumas formas de uso do método map.
Após a exeução, o map
retorna um novo array
com os itens mapeados pela função callback
Sintaxe:
map(array $arr, callable $callback): Array;
$arr
Array a ser usado pelo método
$callback
Esta função deve processar o elemento recebido por parâmetro e retornar o resulta deste processamento.
retorno
Retorna um novo array com os elementos processados pelo método, de acordo com o callbak passado por parâmetro.
Exemplo 01
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
'Gato',
'Cachorro',
'Baleia',
'Elefante',
'Leão'
];
$newArr = it::map($arr, function($v, $i) {
$first = substr($v, 0, 1);
$last = substr($v, -1, 1);
return "[{$i}]-{$v}: inicia com '{$first}' e finaliza com '{$last}'";
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
array(5) {
[0]=>
string(43) "[0]-Gato: inicia com 'G' e finaliza com 'o'"
[1]=>
string(47) "[1]-Cachorro: inicia com 'C' e finaliza com 'o'"
[2]=>
string(45) "[2]-Baleia: inicia com 'B' e finaliza com 'a'"
[3]=>
string(47) "[3]-Elefante: inicia com 'E' e finaliza com 'e'"
[4]=>
string(44) "[4]-Leão: inicia com 'L' e finaliza com 'o'"
}
Exemplo 02
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
'Gato',
'Cachorro',
'Baleia',
'Elefante',
'Leão'
];
$newArr = it::map($arr, function($v) {
if (preg_match('/^.*o$/', $v)) {
$v = "{$v}: Termina com 'o'";
}
return $v;
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
array(5) {
[0]=>
string(21) "Gato: Termina com 'o'"
[1]=>
string(25) "Cachorro: Termina com 'o'"
[2]=>
string(6) "Baleia"
[3]=>
string(8) "Elefante"
[4]=>
string(22) "Leão: Termina com 'o'"
}
O método find(...) é usado nos casos onde precisamos econtrar a primeira ocorrência de um elemento, de acordo com o callback passado como parâmetro. Abaixo é possível observar algumas formas de uso do método find.
Sintaxe:
find(array $arr, callable $callback): mixed;
$arr
Array a ser usado pelo método
$callback
Esta função deve retornar o elemento atual do array se a condição passada por callback for satisfeita.
retorno
Retorna um elemento do array, se a condição do callback for satisfeita ou null se nenhum elemento for encontrado.
Exemplo
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
['tipo' => 'Barco', 'rodas' => 0],
['tipo' => 'Carro', 'rodas' => 4],
['tipo' => 'Moto', 'rodas' => 2],
['tipo' => 'Quadriciclo', 'rodas' => 4],
['tipo' => 'Caminhão', 'rodas' => 'undefined']
];
$newArr = it::find($arr, function($v) {
return $v['rodas'] == 4;
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
array(2) {
["tipo"]=>
string(5) "Carro"
["rodas"]=>
int(4)
}
O método filter(...) é usado nos casos onde precisamos filtrar os elementos de uma array de acordo com o callback passado como parâmetro. Abaixo é possível observar algumas formas de uso do método filter.
Sintaxe:
filter(array $arr, callable $callback): array;
$arr
Array a ser usado pelo método
$callback
Esta função deve retornar um valor booleano, onde true significa que o elemento atual deve fazer parte do novo array (deve passar pelo filtro), e false significa que o elemento atual deve ser descartado.
retorno
Retorna um novo array com os elementos filtrados pela condição do callback.
Exemplo 01
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
['tipo' => 'Barco', 'rodas' => 0],
['tipo' => 'Carro', 'rodas' => 4],
['tipo' => 'Moto', 'rodas' => 2],
['tipo' => 'Quadriciclo', 'rodas' => 4],
['tipo' => 'Monociclo', 'rodas' => 1]
];
$newArr = it::filter($arr, function($v) {
return $v['rodas'] > 1;
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
array(3) {
[0]=>
array(2) {
["tipo"]=>
string(5) "Carro"
["rodas"]=>
int(4)
}
[1]=>
array(2) {
["tipo"]=>
string(4) "Moto"
["rodas"]=>
int(2)
}
[2]=>
array(2) {
["tipo"]=>
string(11) "Quadriciclo"
["rodas"]=>
int(4)
}
}
Exemplo 02
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
'Gato',
'Cachorro',
'Baleia',
'Elefante',
'Leão'
];
$newArr = it::filter($arr, function($v) {
return (bool) preg_match('/^.a.*$/', $v);
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
array(3) {
[0]=>
string(4) "Gato"
[1]=>
string(8) "Cachorro"
[2]=>
string(6) "Baleia"
}
O método even(...) é usado nos casos onde precisamos validar que todos os elementos do array atendem a condição passada no callback.
Sintaxe:
even(array $arr, callable $callback): bool;
$arr
Array a ser usado pelo método
$callback
Esta função deve retornar um valor booleano, onde true significa que o elemento atual atende a condição, e false significa que o elemento atual não atende.
retorno
Retorna true se todos os elementos do array satisfizerem a condição do callback. Retorna false se ao menons um elemento não satisfizer a condição do callback.
Exemplo 01
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
['tipo' => 'Barco', 'rodas' => 0],
['tipo' => 'Carro', 'rodas' => 4],
['tipo' => 'Moto', 'rodas' => 2],
['tipo' => 'Quadriciclo', 'rodas' => 4],
['tipo' => 'Monociclo', 'rodas' => 1]
];
$newArr = it::even($arr, function($v) {
return (bool) preg_match('/^.*o$/', $v['tipo']);
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
bool(true)
Exemplo 02
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
['tipo' => 'Barco', 'rodas' => 0],
['tipo' => 'Carro', 'rodas' => 4],
['tipo' => 'Moto', 'rodas' => 2],
['tipo' => 'Quadriciclo', 'rodas' => 4],
['tipo' => 'Monociclo', 'rodas' => 1]
];
$newArr = it::even($arr, function($v) {
return $v['rodas'] > 1;
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
bool(false)
O método only(...) é usado nos casos onde precisamos validar que SOMENTE um dos elementos do array atendem a condição passada no callback.
Sintaxe:
only(array $arr, callable $callback): bool;
$arr
Array a ser usado pelo método
$callback
Esta função deve retornar um valor booleano, onde true significa que o elemento atual atende a condição, e false significa que o elemento atual não atende.
retorno
Retorna true se APENAS UM dos elementos do array satisfizer a condição do callback. Retorna false se mais de um ou nenhum elemento satisfizer a condição do callback.
Exemplo 01
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
['tipo' => 'Barco', 'rodas' => 0],
['tipo' => 'Carro', 'rodas' => 4],
['tipo' => 'Moto', 'rodas' => 2],
['tipo' => 'Quadriciclo', 'rodas' => 4],
['tipo' => 'Monociclo', 'rodas' => 1]
];
$newArr = it::only($arr, function($v) {
return $v['rodas'] == 0;
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
bool(true)
Exemplo 02
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
['tipo' => 'Barco', 'rodas' => 0],
['tipo' => 'Carro', 'rodas' => 4],
['tipo' => 'Moto', 'rodas' => 2],
['tipo' => 'Quadriciclo', 'rodas' => 4],
['tipo' => 'Monociclo', 'rodas' => 1]
];
$newArr = it::only($arr, function($v) {
return strlen($v['tipo']) == 5;
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
bool(true)
O método last(...) é usado nos casos onde precisamos econtrar a última ocorrência de um elemento, de acordo com o callback passado como parâmetro. Abaixo é possível observar algumas formas de uso do método last.
Sintaxe:
only(array $arr, callable $callback): mixed;
$arr
Array a ser usado pelo método
$callback
Esta função deve retornar o elemento atual do array se a condição passada por callback for satisfeita.
retorno
Retorna um elemento do array, se a condição do callback for satisfeita ou null se nenhum elemento for encontrado.
Exemplo
use HTR\Utils\Iterables\IterableUtils as it;
$arr = [
['tipo' => 'Barco', 'rodas' => 0],
['tipo' => 'Carro', 'rodas' => 4],
['tipo' => 'Moto', 'rodas' => 2],
['tipo' => 'Quadriciclo', 'rodas' => 4],
['tipo' => 'Caminhão', 'rodas' => 'undefined']
];
$newArr = it::last($arr, function($v) {
return $v['rodas'] == 4;
});
var_dump($newArr);
A saída da execução acima se parece com o seguinte
array(2) {
["tipo"]=>
string(5) "Quadriciclo"
["rodas"]=>
int(4)
}
O método reduce(...) executa uma função reducer
(callback) para cada elemento do array, resultando num único valor de retorno. Abaixo é possível observar algumas formas de uso do método reduce.
Sintaxe:
reduce(array $arr, callable $callback, $default): mixed;
$arr
Array a ser usado pelo método
$callback
Esta função deve retornar o resultado da lógica de redução aplicada no elemento corrente do array. Esta função recebe três parâmetros:
$acc
: valor das reduções anteriores$value
: valor do elemento corrente$index
: valor do index do elemento corrente
$default
Valor padrão de entrada para $acc
. Caso a lógica não seja aplicada a nenhum elemento do array, este valor será retornado por padrão. Caso não seja passado nenhum valor para este parâmetro, então null
é considerado como padrão.
retorno
Deve retornar o valor da redução aplicada pela lógica do callback.
Exemplo
use HTR\Utils\Iterables\IterableUtils as it;
$arr = ['h', 'e', 'i', 't', 'o', 'r'];
$result = it::reduce($arr, function($acc, $value) {
return $acc . strtoupper($value);
});
var_dump($result);
A saída da execução acima se parece com o seguinte
string(6) "HEITOR"
Exemplo
use HTR\Utils\Iterables\IterableUtils as it;
$arr = ['h', 'e', 'i', 't', 'o', 'r'];
$result = it::reduce($arr, function($acc, $value, $index) {
if (in_array($value, ['h', 't', 'r'])) {
$acc .= $index . '-' . strtoupper($value);
}
return $acc;
});
var_dump($result);
A saída da execução acima se parece com o seguinte
string(9) "0-H3-T5-R"
Esta biblioteca foi desenvolvida por Edson B S Monteiro como treinamento de TDD com PHP.