Funções do Array
Esta página é sobre as classes Arrays, ArrayHash e ArrayList, que estão relacionadas a arrays.
Instalação:
Arrays
Nette\Utils\Arrays é uma classe estática que contém um punhado de funções úteis de matriz. Seu equivalente para iteradores é Nette\Utils\Iterables.
Os exemplos a seguir assumem que a seguinte classe está definida:
associate(array $array, mixed $path): array|\stdClass
A função transforma de forma flexível o $array
em uma matriz associativa ou objetos de acordo com o caminho
especificado $path
. O caminho pode ser uma string ou uma matriz. Ele consiste nos nomes das chaves na matriz de
entrada e em operadores como ‚[]‘, ‚->‘, ‚=‘ e ‚|‘. Lança Nette\InvalidArgumentException
se
o caminho for inválido.
contains(array $array, $value): bool
Testa uma matriz para a presença de valor. Utiliza uma comparação rigorosa (===
)
every(array $array, callable $predicate): bool
Testa se todos os elementos da matriz passam no teste implementado pela função fornecida, que tem a assinatura
function ($value, $key, array $array): bool
.
Veja algumas().
filter(array $array, callable $predicate): array
Retorna uma nova matriz contendo todos os pares de valores-chave que correspondem ao endereço $predicate
fornecido. O retorno de chamada tem a assinatura function ($value, int|string $key, array $array): bool
.
first(array $array, ?callable $predicate=null, ?callable $else=null): mixed
Retorna o primeiro item (que corresponde ao predicado especificado, se fornecido). Se não houver tal item, ele retorna
o resultado da invocação de $else
ou nulo. O $predicate
tem a assinatura
function ($value, int|string $key, array $array): bool
.
Ele não altera o ponteiro interno, ao contrário de reset()
. Os parâmetros $predicate
e
$else
existem desde a versão 4.0.4.
Consulte last().
firstKey(array $array, ?callable $predicate=null): int|string|null
Retorna a chave do primeiro item (que corresponde ao predicado especificado, se fornecido) ou nula se não houver tal item. O
$predicate
tem a assinatura function ($value, int|string $key, array $array): bool
.
Consulte lastKey().
flatten(array $array, bool $preserveKeys=false): array
Transforma a matriz multidimensional em matriz plana.
get(array $array, string|int|array $key, ?mixed $default=null): mixed
Devoluções $array[$key]
item. Se ele não existir, Nette\InvalidArgumentException
é lançado, a
menos que um valor padrão seja definido como terceiro argumento.
O argumento $key
pode também ser uma matriz.
getRef(array &$array, string|int|array $key): mixed
Obtém referência a dado $array[$key]
. Se o índice não existir, um novo índice é criado com valor
null
.
Trabalha com matrizes multidimensionais, assim como get().
grep(array $array, string $pattern, bool $invert=false): array
Devolve apenas os itens da matriz, que correspondem a uma expressão regular $pattern
. Se $invert
é
true
, ele devolve elementos que não correspondem. A compilação Regex ou erro de tempo de execução lança
Nette\RegexpException
.
insertAfter(array &$array, string|int|null $key, array $inserted): void
Insere o conteúdo da matriz $inserted
no $array
imediatamente após o $key
. Se
$key
for null
(ou não existir), ele é inserido no final.
insertBefore(array &$array, string|int|null $key, array $inserted): void
Insere o conteúdo da matriz $inserted
no $array
antes do $key
. Se $key
é
null
(ou não existe), ele é inserido no início.
invoke(iterable $callbacks, …$args): array
Convoca todos os callbacks e devolve uma série de resultados.
invokeMethod(iterable $objects, string $method, …$args): array
Invoca o método em cada objeto de uma matriz e retorna uma série de resultados.
isList(array $array): bool
Verifica se a matriz está indexada em ordem ascendente de chaves numéricas a partir de zero, também conhecida como lista.
last(array $array, ?callable $predicate=null, ?callable $else=null): mixed
Retorna o último item (que corresponde ao predicado especificado, se fornecido). Se não houver tal item, ele retorna
o resultado da invocação de $else
ou nulo. O $predicate
tem a assinatura
function ($value, int|string $key, array $array): bool
.
Ele não altera o ponteiro interno, ao contrário de end()
. Os parâmetros $predicate
e
$else
existem desde a versão 4.0.4.
Consulte first().
lastKey(array $array, ?callable $predicate=null): int|string|null
Retorna a chave do último item (que corresponde ao predicado especificado, se fornecido) ou nula se não houver tal item. O
$predicate
tem a assinatura function ($value, int|string $key, array $array): bool
.
Consulte firstKey().
map(array $array, callable $transformer): array
Liga para $transformer
sobre todos os elementos da matriz e retorna a matriz de valores de retorno. A chamada de
retorno tem a assinatura function ($value, $key, array $array): bool
.
mapWithKeys(array $array, callable $transformer): array
Cria uma nova matriz transformando os valores e as chaves da matriz original. A função $transformer
tem a
assinatura function ($value, $key, array $array): ?array{$newValue, $newKey}
. Se $transformer
retornar
null
, o elemento será ignorado. Para elementos retidos, o primeiro elemento da matriz retornada é usado como a
nova chave e o segundo elemento como o novo valor.
Esse método é útil em situações em que você precisa alterar a estrutura de uma matriz (chaves e valores simultaneamente) ou filtrar elementos durante a transformação (retornando null para elementos indesejados).
mergeTree(array $array1, array $array2): array
Recursivamente, funde dois campos. É útil, por exemplo, para fundir estruturas de árvores. Ele se comporta como o operador
+
para array, ou seja, adiciona um par chave/valor do segundo array ao primeiro e mantém o valor do primeiro array
no caso de uma colisão de chave.
Os valores da segunda matriz são sempre anexados à primeira. O desaparecimento do valor 10
da segunda matriz
pode parecer um pouco confuso. Deve-se notar que tanto este valor quanto o valor 5
in the first array have the same
numeric key 0
, portanto, no campo resultante há apenas um elemento do primeiro array.
normalize(array $array, ?string $filling=null): array
Normaliza o array para o array associativo. Substituindo as chaves numéricas por seus valores, o novo valor será
$filling
.
pick(array &$array, string|int $key, ?mixed $default=null): mixed
Devolve e remove o valor de um item de uma matriz. Se ele não existir, ele lança uma exceção, ou retorna
$default
, se fornecido.
renameKey(array &$array, string|int $oldKey, string|int $newKey): bool
Renomeia uma chave. Retorna true
se a chave foi encontrada na matriz.
getKeyOffset(array $array, string|int $key): ?int
Retorna a posição indexada a zero de determinada chave de matriz. Retorna null
se a chave não for
encontrada.
some(array $array, callable $predicate): bool
Testa se pelo menos um elemento da matriz passa no teste implementado pela callback fornecida com a assinatura
function ($value, $key, array $array): bool
.
Veja cada().
toKey(mixed $key): string|int
Converte um valor em uma chave de array, que é um número inteiro ou uma string.
toObject(iterable $array, object $object): object
Copia os elementos da matriz $array
para o objeto $object
e depois o devolve.
wrap(array $array, string
$prefix=''
, string $suffix=''
): array
Ele lança cada elemento da matriz para cordelar e o encerra com $prefix
e $suffix
.
ArrayHash
O objeto Nette\Utils\ArrayHash é o descendente da classe genérica stdClass e o estende à capacidade de tratá-lo como uma matriz, por exemplo, acessando membros usando parênteses rectos:
Você pode usar a função count($hash)
para obter o número de elementos.
Você pode iterar sobre um objeto como faria com uma matriz, mesmo com uma referência:
As arrays existentes podem ser transformadas para ArrayHash
usando from()
:
A transformação é recursiva:
Pode ser evitado pelo segundo parâmetro:
Transformar de volta para a matriz:
ArrayList
Nette\Utils\ArrayList representa uma matriz linear onde os índices são apenas números inteiros subindo de 0.
Você pode usar a função count($list)
para obter o número de itens.
Você pode iterar sobre um objeto como faria com uma matriz, mesmo com uma referência:
As arrays existentes podem ser transformadas para ArrayList
usando from()
:
O acesso a chaves além dos valores permitidos lança uma exceção Nette\OutOfRangeException
:
A remoção da chave resultará na renumeração dos elementos:
Você pode adicionar um novo elemento ao início usando prepend()
: