PHP - Arrays
O que é um Array?
Um array no PHP é na verdade um mapa ordenado. Um mapa é um tipo que relaciona valores a chaves. Este tipo é otimizado para várias usos diferentes: ele pode ser tratado como um array, uma lista (vetor), hashtable (que é uma implementação de mapa), dicionário, coleção, pilha, fila e provavelmente mais. Assim como existe a possibilidade dos valores do array serem outros arrays, árvores e arrays multidimensionais.
Declarando um Array
Para entendermos melhor a definição acima, vamos utilizar o exemplo de uma lista (vetor).
Ex: Vamos supor que eu possua uma lista das minhas cores favoritas e deseje manter isso em um array, então eu posso criar uma variável chamada $cores a qual irá agrupar esses valores.
Note que o que está em azul na imagem acima, representa o índice (chave) da lista.
Estrutura de básica um array, utilizando o construtor de linguagem array():
array(
chave_1 => valor_1,
chave_2 => valor_2,
chave_3 => valor_3,
...
)
Podemos declarar essa lista(vetor) de várias formas, como antigamente 'versões mais antigas do PHP' ou 'versões mais atuais do PHP':
Declarando como nas versões antigas:
<?php
$cores[0] = 'preto';
$cores[1] = 'branco';
$cores[2] = 'vermelho';
$cores[3] = 'azul';
$cores[4] = 'amarelo';
$cores[5] = 'laranja';
$cores[6] = 'rosa';
var_dump($cores); //Mostra informações sobre a variável
?>
Declarando como nas versões mais atuais, utilizando o construtor de linguagem array(). Ele leva qualquer quantidade de pares separados por vírgula chave => valor como argumentos:
<?php
$cores = array(0=>'preto', 1=>'branco', 2=>'vermelho',3=>'azul', 4=>'amarelo', 5=>'laranja', 6=>'rosa');
var_dump($cores);
?>
Declarando como nas versões mais atuais, , utilizando o construtor de linguagem array(), sem declarar a chave:
<?php
$cores = array('preto', 'branco', 'vermelho', 'azul', 'amarelo', 'laranja', 'rosa');
var_dump($cores);
?>
Ao executarmos no navegador os 3 exemplos acima, vamos visualizar o mesmo resultado:
Note que mesmo no último exemplo, o qual não declaramos a chave, a estrutura ficou a mesma, isso ocorre pois todo array irá iniciar com índice 0, a não ser que você defina uma chave diferente.
Regras Importantes
- Todo array inicia com índice 0, exceto quando você define a chave;
- Quando um array possuí somente uma dimensão, como nos exemplos acima, ele é chamado de vetor;
- Para ser um array realmente ele deve ser bidimensional, tridimensional e assim por diante. Veremos a seguir...
Arrays Multidimensionais
Os arrays não tem que ser sempre uma lista simples de chaves e valores, cada localização do array pode conter um outro array. Isso significa que podemos criar um array Bidimensional. O que pode ser representado como sendo uma matriz com linhas e colunas.
Ex: Vamos supor que eu tenha uma empresa, um depósito de materiais de construção e que deseje organizar os meus produtos e suas respectivas informações. Eu poderia criar um array bidimensional onde cada linha do array representaria um determinado produto e cada coluna um atributo. Como vimos anteriormente, realizamos esse processo definindo ou não as chaves e de diversas formas. Conforme exemplo abaixo:
PS: Note que cada produto e descrição se encontra sem ç ou acentuação, para facilitar o exemplo evitando erros.
O que se encontra em azul na imagem acima representa o índice dos atributos de cada produto.
Declarando um array bidimensional como nas versões antigas do PHP, definindo as chaves como numéricas:
<?php
$produtos[0][0] = 'MAR';
$produtos[0][1] = 'Martelo';
$produtos[0][2] = 85;
$produtos[1][0] = 'OLE';
$produtos[1][1] = 'Oleo';
$produtos[1][2] = 25;
$produtos[2][0] = 'LUV';
$produtos[2][1] = 'Luvas de Latex';
$produtos[2][2] = 16;
var_dump($produtos);
?>
Segue abaixo resultado do código acima:
Declarando um array bidimensional como nas versões antigas do PHP, com chaves numéricas e nomes para os atributos:
<?php
$produtos[0]['codigo'] = 'MAR';
$produtos[0]['descricao'] = 'Martelo';
$produtos[0]['preco'] = 85;
$produtos[1]['codigo'] = 'OLE';
$produtos[1]['descricao'] = 'Oleo';
$produtos[1]['preco'] = 25;
$produtos[2]['codigo'] = 'LUV';
$produtos[2]['descricao'] = 'Luvas de Latex';
$produtos[2]['preco'] = 16;
var_dump($produtos);
?>
Segue abaixo resultado do código acima:
Declarando como nas versões mais atuais do PHP, utilizando o construtor de linguagem array(), sem declarar a chave:
<?php
$produtos = array(array('MAR', 'Martelo', 85),
array('OLE', 'Oleo', 25),
array('LUV', 'Luvas de Latex', 16)
);
var_dump($produtos);
?>
Segue abaixo resultado do código acima:
Declarando como nas versões mais atuais do PHP, utilizando o construtor de linguagem array(). Ele leva qualquer quantidade de pares separados por vírgula chave => valor como argumentos:
<?php
$produtos = array(
array( 'codigo' => 'MAR', 'descricao' => 'Martelo', 'preco' => 85 ),
array( 'codigo' => 'OLE', 'descricao' => 'Oleo', 'preco' => 25 ),
array( 'codigo' => 'LUV', 'descricao' => 'Luvas de Latex', 'preco' => 16 )
);
var_dump($produtos);
?>
Segue abaixo resultado do código acima:
Observando os exemplos acima, percebemos que os resultados são praticamente os mesmos, o que muda é só a definição das chaves ou não. Apresentamos todas essas formas de declaração de um array, apenas para fins de estudo. Recomendo a utilização da sintaxe mais atual nas declarações.
Segue abaixo um exemplo mais completo declarando um array, percorrendo todos seus itens, e os imprimindo na tela:
<?php
//Declaração do Array
$produtos = array(
array( 'codigo' => 'MAR', 'descricao' => 'Martelo', 'preco' => 85 ),
array( 'codigo' => 'OLE', 'descricao' => 'Oleo', 'preco' => 25 ),
array( 'codigo' => 'LUV', 'descricao' => 'Luvas de Latex', 'preco' => 16 )
);
echo 'Lista de Materiais';
//Percorrendo os itens do array e imprimindo na tela
foreach ($produtos as $item) {
echo "Código: " . $item['codigo'] . "";
echo "Descrição: " . $item['descricao'] . "";
echo "Preço: " . $item['preco'] . "";
}
?>
Segue abaixo resultado do script acima:
Funções para Arrays
Existem muitos outros recursos importantes que o PHP disponibiliza para facilitar o uso de arrays, segue abaixo uma lista de funções disponíveis:
- array_change_key_case — Modifica a caixa de todas as chaves em um array
- array_chunk — Divide um array em pedaços
- array_column — Retorna os valores de uma coluna do array informado
- array_combine — Cria um array usando um array para chaves e outro para valores
- array_count_values — Conta todos os valores de um array
- array_diff_assoc — Computa a diferença entre arrays com checagem adicional de índice
- array_diff_key — Computa a diferença entre arrays usando as chaves na comparação
- array_diff_uassoc — Computa a diferença entre arrays com checagem adicional de índice que feita por uma função de callback fornecida pelo usuário
- array_diff_ukey — Computa a diferença entre arrays usando uma função callback na comparação de chaves
- array_diff — Computa as diferenças entre arrays
- array_fill_keys — Preenche um array com valores, especificando chaves
- array_fill — Preenche um array com valores
- array_filter — Filtra elementos de um array utilizando uma função callback
- array_flip — Permuta todas as chaves e seus valores associados em um array
- array_intersect_assoc — Computa a interseção de arrays com uma adicional verificação de índice
- array_intersect_key — Computa a interseção de array comparando pelas chaves
- array_intersect_uassoc — Computa a interseção de arrays com checagem de índice adicional, compara índices por uma função de callback
- array_intersect_ukey — Computa a interseção de arrays usando uma função de callback nas chaves para comparação
- array_intersect — Calcula a interseção entre arrays
- array_key_exists — Checa se uma chave ou índice existe em um array
- array_key_first — Pega a primeira chave de um array
- array_key_last — Pega a última chave de um array
- array_keys — Retorna todas as chaves ou uma parte das chaves de um array
- array_map — Aplica uma função em todos os elementos dos arrays dados
- array_merge_recursive — Funde dois ou mais arrays recursivamente
- array_merge — Combina um ou mais arrays
- array_multisort — Ordena múltiplos arrays ou arrays multidimensionais
- array_pad — Expande um array para um certo comprimento utilizando um determinado valor
- array_pop — Extrai um elemento do final do array
- array_product — Calcula o produto dos valores de um array
- array_push — Adiciona um ou mais elementos no final de um array
- array_rand — Escolhe um ou mais elementos aleatórios de um array
- array_reduce — Reduz um array para um único valor através de um processo iterativo via função callback
- array_replace_recursive — Replaces elements from passed arrays into the first array recursively
- array_replace — Replaces elements from passed arrays into the first array
- array_reverse — Retorna um array com os elementos na ordem inversa
- array_search — Procura por um valor em um array e retorna sua chave correspondente caso seja encontrado
- array_shift — Retira o primeiro elemento de um array
- array_slice — Extrai uma parcela de um array
- array_splice — Remove uma parcela do array e substitui com outros elementos
- array_sum — Calcula a soma dos elementos de um array
- array_udiff_assoc — Computa a diferença entre arrays com checagem adicional de índice, compara dados por uma função de callback
- array_udiff_uassoc — Computa a diferença entre arrays com checagem adicional de índice, compara dados e índices por uma função de callback
- array_udiff — Computa a diferença de arrays usando uma função de callback para comparação dos dados
- array_uintersect_assoc — Computa a interseção de arrays com checagem adicional de índice, compara os dados utilizando uma função de callback
- array_uintersect_uassoc — Computa a interseção de arrays com checagem adicional de índice, compara os dados e os índices utilizando funções de callback separadas
- array_uintersect — Computa a interseção de array, comparando dados com uma função callback
- array_unique — Remove os valores duplicados de um array
- array_unshift — Adiciona um ou mais elementos no início de um array
- array_values — Retorna todos os valores de um array
- array_walk_recursive — Aplica um função do usuário recursivamente para cada membro de um array
- array_walk — Aplica uma determinada funcão em cada elemento de um array
- array — Cria um array
- arsort — Ordena um array em ordem descrescente mantendo a associação entre índices e valores
- asort — Ordena um array mantendo a associação entre índices e valores
- compact — Cria um array contendo variáveis e seus valores
- count — Conta o número de elementos de uma variável, ou propriedades de um objeto
- current — Retorna o elemento corrente em um array
- each — Retorna o par chave/valor corrente de um array e avança o seu cursor
- end — Faz o ponteiro interno de um array apontar para o seu último elemento
- extract — Importa variáveis para a tabela de símbolos a partir de um array
- in_array — Checa se um valor existe em um array
- key_exists — Sinônimo de array_key_exists
- key — Retorna uma chave de um array
- krsort — Ordena um array pelas chaves em ordem descrescente
- ksort — Ordena um array pelas chaves
- list — Cria variáveis como se fossem arrays
- natcasesort — Ordena um array utilizando o algoritmo da "ordem natural" sem diferenciar maiúsculas e minúsculas
- natsort — Ordena um array utilizando o algoritmo da "ordem natural"
- next — Avança o ponteiro interno de um array
- pos — Sinônimo de current
- prev — Retrocede o ponteiro interno de um array
- range — Cria um array contendo uma faixa de elementos
- reset — Faz o ponteiro interno de um array apontar para o seu primeiro elemento
- rsort — Ordena um array em ordem descrescente
- shuffle — Mistura os elementos de um array
- sizeof — Sinônimo de count
- sort — Ordena um array
- uasort — Ordena um array utilizando uma função de comparação definida pelo usuário e mantendo as associações entre chaves e valores
- uksort — Ordena um array pelas chaves utilizando uma função de comparação definida pelo usuário.
- usort — Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário
Recomendo que acesse os links e faça seus próprios testes com os exemplos apresentados. Bons Estudos!
Fontes:
https://secure.php.net/manual/pt_BR/language.types.array.php