Concatenar

Conectando pessoas, ferramentas e idéias.

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:

resultado do vetor cores

 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

  1. Todo array inicia com índice 0, exceto quando você define a chave;
  2. Quando um array possuí somente uma dimensão, como nos exemplos acima, ele é chamado de vetor;
  3. 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:

array_bidimensional

 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:

resultado_bidimensional2 

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:

resultado_bidimensional2.1 

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:

resultado_bidimensional2.2

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:

resultado_bidimensional3


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

https://secure.php.net/manual/pt_BR/ref.array.php