Skip to content

br-monteiro/iterable-utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Iterable Utils

Unit Tests

Esta Lib reúne algumas funções úteis para o tratamento de arrays

Dependências

PHP 7.0+

Testes

Para rodar os testes unitários basta executar o seguinte comando no terminal

$ composer test

Métodos disponíveis na biblioteca

  • map
  • find
  • filter
  • even
  • only
  • last
  • reduce

Características comuns dos métodos

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
}

Método map

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'"
}

Método find

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)
}

Método filter

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"
}

Método even

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)

Método only

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)

Método last

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)
}

Método reduce

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"

Créditos

Esta biblioteca foi desenvolvida por Edson B S Monteiro como treinamento de TDD com PHP.

LAUS DEO .'.

About

Lib que reune algumas funções uteis para o tratamento de Arrays com PHP

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages