\Numenor\PhpArrayWrapper

Wrapper para array e suas funções da biblioteca padrão do PHP.

Na minha opinião (e na de muitos desenvolvedores, para falar a verdade), um dos piores aspectos do desenvolvimento em PHP é a nomenclatura das funções da biblioteca padrão. Muitas funções recebem nomes absolutamente idiotas por razões históricas (basicamente, "o nome da função C que executa isso é esse, vamos usar o mesmo nome"), o que acabou não só trazendo antigos hábitos de nomenclatura para dentro de uma linguagem que se pretende moderna, como ainda introduziu alguns novos maus hábitos de nomenclatura novos. E isso sem falar em problemas com ordem de parâmetros inconsistente, comportamentos inconsistentes entre funções que deveriam ser parecidas, etc.

Esta classe visa prover uma interface normalizada e uniforme para estas funções de array, de modo que o desenvolvedor possa facilmente autocompletá-las utilizando uma IDE minimamente decente sem ter que ficar lembrando ou consultando a documentação do PHP para lembrar exatamente como determinada função funciona. Eu acredito que os beneficios de clareza e legibilidade superem o custo de overhead de uma chamada a mais de função para executar a operação.

No desenvolvimento desta parte da biblioteca, meu objetivo foi manter um equilíbrio entre o padrão minimalista de nomes do PHP nativo e a ridícula verbosidade de nomes estilo Java. Abreviações, quando fazem sentido, foram mantidas.

Summary

Methods
Properties
Constants
getChaves()
getChave()
getItemAleatorio()
getValorColuna()
encontrarItem()
verificarChave()
inserirFinal()
removerFinal()
inserirInicio()
removerInicio()
inserir()
remover()
criar()
dividir()
combinar()
preencher()
flip()
contarValores()
chaveMinuscula()
chaveMaiuscula()
interseccao()
interseccaoChaves()
intersecacaoAssociativa()
diferenca()
diferencaAssociativa()
produto()
filtrar()
aplicarCallback()
mesclar()
ordenar()
ordenarAssociativo()
ordenarChave()
No public properties found
ORDER_ASC
ORDER_DESC
validarTipoChave()
No protected properties found
N/A
No private methods found
No private properties found
N/A

Constants

ORDER_ASC

ORDER_ASC

Identificador de ordenação crescente.

ORDER_DESC

ORDER_DESC

Identificador de ordenação decrescente.

Methods

getChaves()

getChaves(array  $array) : array

Retorna todas as chaves do array.

Parameters

array $array

O array.

Returns

array —

Lista de chaves do array.

getChave()

getChave(array  $array, mixed  $valor) : array

Retorna todas as chaves do array que possuam o valor informado.

Ao contrário do funcionamento normal da função array_keys(), a comparação é sempre feita de forma estrita (operador ===).

\Numenor\Php\ArrayWrapper::getChave(array('A', 'B', 'C', 'first' => 'A', 'second' => 'B'), 'A'); // [0, 'first']

Parameters

array $array

O array.

mixed $valor

O valor para o qual se quer as chaves.

Returns

array —

Lista de chaves que possuem o valor informado.

getItemAleatorio()

getItemAleatorio(array  $array, integer  $numeroItens = 1) : mixed|array

Retorna um ou mais itens do array escolhidos aleatoriamente.

Parameters

array $array

O array.

integer $numeroItens

Número de itens desejados. O padrão é 1 (apenas um item).

Returns

mixed|array —

O item escolhido aleatoriamente, caso $numeroItens seja um; um array com $numeroItens escolhidos aleatoriamente, caso contrário.

getValorColuna()

getValorColuna(array  $array, string  $colunaChave, string  $chaveIndice = '') : array

Retorna todos os valores de uma única coluna de um array multidimensional, como se fosse uma tabela.

$array = [ [ 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ], [ 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ], [ 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ], [ 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ] ]; \Numenor\Php\ArrayWrapper::getValorColuna($array, 'first_name'); // ['John', 'Sally', 'Jane', 'Peter'] \Numenor\Php\ArrayWrapper::getValorColuna($array, 'first_name', 'id'); // [2135 => 'John', 3245 => 'Sally', 5342 => 'Jane', 5623 => 'Peter']

Parameters

array $array

O array.

string $colunaChave

Nome da chave representando a coluna dos valores desejados.

string $chaveIndice

Nome da chave da coluna cujos valores serão usados como chave dos array resultante.

Throws

\Numenor\Excecao\ArrayWrapper\ExcecaoArrayColumnNumeroParametros

se o número de parâmetros informados é inferior ao mínimo necessário (1).

\Numenor\Excecao\ArrayWrapper\ExcecaoArrayColumnChaveInvalida

se o parâmetro $columnKey não é do tipo {String}, ou não pode ser convertido para uma string.

\Numenor\Excecao\ArrayWrapper\ExcecaoArrayColumnIndiceInvalido

se o parâmetro $indexKey foi informado e não é do tipo {String}, ou não pode ser convertido para uma string.

Returns

array —

Lista de todos os valores da coluna correspondente.

encontrarItem()

encontrarItem(array  $array, mixed  $item) : mixed

Busca um item no array, retornando a chave correspondente ao item se encontrado.

Parameters

array $array

O array.

mixed $item

O item buscado.

Throws

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoItemNaoEncontrado

se o item não existe no array.

Returns

mixed —

A chave correspondente ao item encontrado no array.

verificarChave()

verificarChave(array  $array, string|integer  $chave) : boolean

Verifica a existência de uma chave no array.

Parameters

array $array

O array.

string|integer $chave

Chave a ser verificada no array

Throws

\Numenor\Excecao\Php\ArrayWrapper\ChaveInvalida

se a chave não puder ser convertida para um tipo válido (string ou inteiro).

Returns

boolean —

TRUE caso a chave exista no array, FALSE caso contrário.

inserirFinal()

inserirFinal(array  $array, mixed  $item) 

Insere um item no final do array.

Parameters

array $array

O array.

mixed $item

O item a ser adicionado no final do array.

removerFinal()

removerFinal(array  $array) : mixed

Remove e retorna o item do final do array.

Parameters

array $array

O array.

Returns

mixed —

O item removido do final do array.

inserirInicio()

inserirInicio(array  $array, mixed  $item) 

Insere um item no início do array, incrementando todas as chaves numéricas dos outros itens. As chaves strings não são alteradas.

Parameters

array $array

O array.

mixed $item

O item a ser adicionado no início do array.

removerInicio()

removerInicio(array  $array) : mixed

Remove um item do início do array, decrementando todas as chaves numéricas dos outros itens. As chaves strings não são alteradas.

Parameters

array $array

O array.

Returns

mixed —

O item removido do início do array.

inserir()

inserir(array  $array, mixed  $item, integer|string  $chave) 

Insere um item no array com a chave indicada.

Se a chave já existir, substitui o valor.

Parameters

array $array

O array.

mixed $item

O item a ser inserido no array.

integer|string $chave

A chave onde o item deve ser inserido.

Throws

\Numenor\Excecao\Php\ArrayWrapper\ChaveInvalida

se a chave não puder ser convertida para um tipo válido (string ou inteiro).

remover()

remover(array  $array, integer|string  $chave) : mixed

Remove um item do array com a chave indicada.

O array é reindexado após a remoção, atualizando suas chaves numéricas. As chaves string não são afetadas.

Parameters

array $array

O array.

integer|string $chave

A chave do item a ser removido.

Throws

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoChaveInexistente

se a chave não existir no array.

Returns

mixed —

Item removido do array.

criar()

criar(integer  $inicio, integer  $quantidadeItens, mixed  $item) : array

Cria um array preenchido com um único valor repetido $quantidadeItens vezes.

Ao contrário da função array_fill(), foi optado por não permitir que o índice seja negativo, nem que o número de itens seja menor do que 1.

Parameters

integer $inicio

Índice inicial do array gerado.

integer $quantidadeItens

Número de itens do array gerado.

mixed $item

Valor colocado em todas as posições do array.

Throws

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoArrayFillIndiceInvalido

se o $inicio informado for negativo.

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoArrayFillTamanhoInvalido

se $quantidadeItens for um valor menor do que 1.

Returns

array —

O array gerado.

dividir()

dividir(array  $array, integer  $tamanho, boolean  $preservarChaves = false) : array

Divide o array em pedaços menores.

Parameters

array $array

O array.

integer $tamanho

Tamanho máximo dos pedaços do array. O último pedaço pode ser menor do que o tamanho indicado.

boolean $preservarChaves

Indica se os pedaços devem preservar as suas chaves originais.

Returns

array —

Array multidimensional contendo os pedaços do array.

combinar()

combinar(array  $chaves, array  $valores) : array

Combina dois arrays em um único array, utilizando os valores do primeiro array informado como chaves e os valores do segundo array informado como valores no array resultante.

Parameters

array $chaves

Array de chaves.

array $valores

Array de valores.

Throws

\Numenor\Excecao\Php\ExcecaoArrayCombineTamanhosIncompativeis

se os dois arrays informados não têm o mesmo tamanho.

Returns

array —

Combinação dos dois arrays informados.

preencher()

preencher(array  $array, integer  $novoTamanho, mixed  $valor) : array

Preenche o array com um valor informado até o tamanho informado.

Se o $novoTamanho for um número positivo, os itens são acrescentados no final do array.

Se o $novoTamanho for um número negativo, os itens são acrescentados no início do array.

Parameters

array $array

O array.

integer $novoTamanho

Novo tamanho desejado para o array.

mixed $valor

Valor a ser inserido nas novas posições do array.

Returns

array —

O array preenchido com os novos valores.

flip()

flip(array  $array) : array

Inverte o array de forma que as chaves tornem-se valores e vice-versa.

Como a função array_flip() não interrompe a execução caso os valores do array não possam ser usados como chave, apenas emite um warning, foi acrescentado um laço extra para verificar todos os itens do array e levantar uma exceção caso isso ocorra. Por essa razão, a implementação deste método pode não ser indicada para processamento de alta performance.

Parameters

array $array

O array.

Throws

\Numenor\Excecao\ExcecaoArrayFlipTipoInvalido

se qualquer um dos valores do array não poder ser convertido para um tipo que possa ser usado como chave do array invertido (string ou inteiro).

Returns

array —

Array com as chaves e valores invertidos.

contarValores()

contarValores(array  $array) : array

Conta todos os valores do array e retorna a frequência de ocorrência de cada um deles.

Parameters

array $array

O array.

Returns

array —

Valores do array como chaves, e a frequência de ocorrência como valores.

chaveMinuscula()

chaveMinuscula(array  $array, \Numenor\Php\StringWrapper  $stringWrapper) : array

Retorna uma cópia do array com os caracteres das suas chaves alterados para letras minúsculas.

Funciona para chaves com codificação UTF-8.

Parameters

array $array

O array.

\Numenor\Php\StringWrapper $stringWrapper

Instância do objeto de encapsulamento das operações de strings.

Returns

array —

O array com as chaves alteradas.

chaveMaiuscula()

chaveMaiuscula(array  $array, \Numenor\Php\StringWrapper  $stringWrapper) : array

Retorna uma cópia do array com os caracteres das suas chaves alterados para letras maiúsculas.

Funciona para chaves com codificação UTF-8.

Parameters

array $array

O array.

\Numenor\Php\StringWrapper $stringWrapper

Instância do objeto de encapsulamento das operações de strings.

Returns

array —

O array com as chaves alteradas.

interseccao()

interseccao(array  $array1, array  $array2) : array

Retorna a intersecção entre dois arrays, ou seja, todos os elementos que estão presentes em ambos os arrays, preservando as chaves dos mesmos.

Caso um elemento tenha chaves diferentes nos dois arrays, a chave mantida é a chave do primeiro array. Ao contrário da função array_intersect(), este método trabalha com apenas dois arrays de cada vez.

$array1 = array('A', 'B', 'C'); $array2 = array('first' => 'A', 'second' => 'D', 'third' => 'C'); \Numenor\Php\ArrayWrapper::interseccao($array1, $array2); // ['A', 'C']

Parameters

array $array1

Primeiro array.

array $array2

Segundo array.

Returns

array —

Intersecção dos dois arrays comparados.

interseccaoChaves()

interseccaoChaves(array  $array1, array  $array2) : array

Retorna a intersecção de chaves entre dois arrays, ou seja, todos as chaves que estão presentes em ambos os arrays, preservando os valores dos mesmos.

Caso uma chave tenha valores diferentes nos dois arrays, o valor mantido é o valor do primeiro array.

Ao contrário da função array_intersect_key(), este método trabalha com apenas dois arrays de cada vez.

$array1 = array('A', 'second' => 'B', 'third' => 'C'); $array2 = array('first' => 'A', 'second' => 'D', 'final' => 'C'); \Numenor\Php\ArrayWrapper::interseccaoChaves($array1, $array2); // ['A', 'second' => 'B']

Parameters

array $array1

Primeiro array.

array $array2

Segundo array.

Returns

array —

Intersecção da chaves dos dois arrays comparados.

intersecacaoAssociativa()

intersecacaoAssociativa(array  $array1, array  $array2) : array

Retorna a intersecção entre o dois arrays, ou seja, todos os elementos que estão presentes em ambos os arrays, considerando tanto os valores quanto as chaves do mesmo.

Ao contrário da função array_intersect_assoc(), este método trabalha com apenas dois arrays de cada vez.

$array1 = array('A', 'B', 'C'); $array2 = array('A', 'second' => 'D', 'third' => 'C'); \Numenor\Php\ArrayWrapper::interseccaoAssociativa($array1, $array2); // ['A']

Parameters

array $array1

Primeiro array.

array $array2

Segundo array.

Returns

array —

Array contendo a intersecção dos dois arrays comparados.

diferenca()

diferenca(array  $array1, array  $array2) : array

Retorna a diferença entre o primeiro e o segundo array, ou seja, todos os elementos do primeiro array que não estão presentes no segundo array.

Ao contrário da função array_diff(), este método trabalha com apenas dois arrays de cada vez.

$array1 = array('A', 'B', 'C'); $array2 = array('first' => 'A', 'second' => 'D', 'third' => 'C'); \Numenor\Php\ArrayWrapper::diferenca($array1, $array2); // ['B']

Parameters

array $array1

Primeiro array.

array $array2

Segundo array.

Returns

array —

Array contendo a diferença entre os dois arrays comparados.

diferencaAssociativa()

diferencaAssociativa(array  $array1, array  $array2) : array

Retorna a diferença entre o array instanciado e o array informado, ou seja, todos os elementos do primeiro array que não estão presentes no segundo array, considerando tanto os valores quanto as chaves do mesmo.

Ao contrário da função array_diff_assoc(), este método trabalha com apenas dois arrays de cada vez.

$array1 = array('A', 'B', 'C'); $array2 = array('A', 'second' => 'D', 'third' => 'C'); \Numenor\Php\ArrayWrapper::diferencaAssociativa($array1, $array2); // ['B', 'C']

Parameters

array $array1

Primeiro array.

array $array2

Segundo array.

Returns

array —

Array contendo a diferença entre os dois arrays comparados.

produto()

produto(array  $array) : \Numenor\Php\number

Calcula o produto de todos os valores do array.

$array = array(2, 4, 6); \Numenor\Php\ArrayWrapper::produto($array); // 48

Parameters

array $array

O array.

Returns

\Numenor\Php\number —

O produto dos valores do array.

filtrar()

filtrar(array  $array, callable  $funcaoFiltro, integer  $flag) : array

Filtra o array através de uma função de callback.

A função de callback é chamada para cada item do array; se ela retornar true, o item é incluído no array filtrado.

Parameters

array $array

O array.

callable $funcaoFiltro

Função aplicada em cada item do array filtrado.

integer $flag

Flag determinando quais parâmetros são enviados para a função de callback. Se não for informado, o valor do item é informado; caso seja informado, deve ser uma das seguintes constantes: ARRAY_FILTER_USE_KEY (envia a chave do valor como único parâmetro) ou ARRAY_FILTER_USE_BOTH (envia o valor e a chave como parâmetros).

Throws

\Numenor\Excecao\ExcecaoArrayFilterFlagInvalida

se o parâmetro $flag for informado com um valor inválido.

Returns

array —

O array filtrado.

aplicarCallback()

aplicarCallback(array  $array, callable  $callback) : array

Aplica uma função de callback em cada item do array.

Parameters

array $array

O array.

callable $callback

Função de callback aplicada em cada item do array. A função deve aceitar um parâmetro, correspondente ao item do array sendo percorrido.

Returns

array —

O array alterado.

mesclar()

mesclar(array  $array1, array  $array2) : array

Mescla dois arrays.

Caso uma mesma chave esteja presente em ambos os arrays, então o array resultante terá o valor do segundo array nesta chave.

Ao contrário da função array_merge(), este método trabalha com apenas dois arrays de cada vez.

Parameters

array $array1

Primeiro array.

array $array2

Segundo array.

Returns

array —

O array resultante da mescla dos dois arrays.

ordenar()

ordenar(array  $array, string  $ordem = self::ASC, integer  $tipoOrdenacao = \SORT_STRING) : array

Ordena o array, utilizando a implementação nativa do PHP para o algoritmo Quicksort.

Ao contrário da maioria das funções de array da biblioteca padrão, a função sort() não retorna uma cópia do array informado; ao invés disso, o parâmetro é passado por referência, e a função retorna um valor booleano. Para fins de padronização, este método retorna uma cópia do array.

ATENÇÃO: as chaves do array ordenado não são preservadas; o array é reindexado com chaves numéricas, o que pode ou não ser o comportamento desejado.

Parameters

array $array

O array.

string $ordem

Indica se a ordenação deve ser em ordem crescente ou decrescente.

integer $tipoOrdenacao

Indica o tipo de comparação feita entre os valores:

  • SORT_REGULAR não faz conversão de tipo entre os valores (podendo levar a resultados inesperados se os tipos dos valores são diferentes),
  • SORT_NUMERIC converte os valores para números para fazer a ordenação
  • SORT_STRING converte os valores para texto
  • SORT_LOCALE_STRING é igual a SORT_STRING, mas usando o locale definido na configuração do PHP
  • SORT_NATURAL faz a ordenação como "string em ordem natural", ou seja, algo como "1, 2, 10, 11".

Throws

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoOrdemInvalida

se a ordem não corresponde a uma das ordens aceitas (crescente ou decrescente).

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoTipoOrdemInvalida

se o tipo de ordenação não corresponde a um dos tipos de ordenação aceitos.

Returns

array —

O array ordenado.

ordenarAssociativo()

ordenarAssociativo(array  $array, string  $ordem = self::ASC, integer  $tipoOrdenacao = SORT_STRING) : array

Ordena o array, utilizando a implementação nativa do PHP para o algoritmo Quicksort, e mantendo a associação entre chaves e valores.

Ao contrário da maioria das funções de array da biblioteca padrão, a função sort() não retorna uma cópia do array informado; ao invés disso, o parâmetro é passado por referência, e a função retorna um valor booleano.

Para fins de padronização, este método retorna uma cópia do array.

Parameters

array $array

O array.

string $ordem

Indica se a ordenação deve ser em ordem crescente ou decrescente.

integer $tipoOrdenacao

Indica o tipo de comparação feita entre os valores:

  • SORT_REGULAR não faz conversão de tipo entre os valores (podendo levar a resultados inesperados se os tipos dos valores são diferentes),
  • SORT_NUMERIC converte os valores para números para fazer a ordenação
  • SORT_STRING converte os valores para texto
  • SORT_LOCALE_STRING é igual a SORT_STRING, mas usando o locale definido na configuração do PHP
  • SORT_NATURAL faz a ordenação como "string em ordem natural", ou seja, algo como "1, 2, 10, 11".

Throws

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoOrdemInvalida

se a ordem não corresponde a uma das ordens aceitas (crescente ou decrescente).

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoTipoOrdemInvalida

se o tipo de ordenação não corresponde a um dos tipos de ordenação aceitos.

Returns

array —

O array ordenado, com as suas chaves preservadas.

ordenarChave()

ordenarChave(array  $array, string  $ordem = self::ASC, integer  $tipoOrdenacao = SORT_STRING) : array

Ordena o array pelas suas chaves, utilizando a implementação nativa do PHP para o algoritmo Quicksort.

Ao contrário da maioria das funções de array da biblioteca padrão, a função ksort() não retorna uma cópia do array informado; ao invés disso, o parâmetro é passado por referência, e a função retorna um valor booleano.

Para fins de padronização, este método retorna uma cópia do array.

Parameters

array $array

O array.

string $ordem

Indica se a ordenação deve ser em ordem crescente ou decrescente.

integer $tipoOrdenacao

Indica o tipo de comparação feita entre os valores:

  • SORT_REGULAR não faz conversão de tipo entre os valores (podendo levar a resultados inesperados se os tipos dos valores são diferentes),
  • SORT_NUMERIC converte os valores para números para fazer a ordenação
  • SORT_STRING converte os valores para texto
  • SORT_LOCALE_STRING é igual a SORT_STRING, mas usando o locale definido na configuração do PHP
  • SORT_NATURAL faz a ordenação como "string em ordem natural", ou seja, algo como "1, 2, 10, 11".

Throws

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoOrdemInvalida

se a ordem não corresponde a uma das ordens aceitas (crescente ou decrescente).

\Numenor\Excecao\Php\ArrayWrapper\ExcecaoTipoOrdemInvalida

se o tipo de ordenação não corresponde a um dos tipos de ordenação aceitos.

Returns

array —

O array ordenado pelas chaves.

validarTipoChave()

validarTipoChave(mixed  $chave) : boolean

Valida o tipo de uma chave de array.

Uma chave é considerada válida se ela for um inteiro, uma string, ou um objeto representável como uma string (ou seja, um objeto que implemente o método __toString).

Parameters

mixed $chave

A chave a ser validada.

Returns

boolean —

TRUE se a chave é de um tipo válido, FALSE caso contrário.