Um array no PHP é atualmente um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves. Este tipo é otimizado de várias maneiras, então você pode usá-lo como um array real, ou uma lista (vetor), hashtable (que é uma implementação de mapa), dicionário, coleção, pilha, fila e provavelmente mais. Como você pode ter outro array PHP como um valor, você pode facilmente simular árvores.
A explicação dessas estruturas estão além do escopo desse manual, mas você pode encontrar exemplos para cada uma dessas estruturas a seguir. Para mais informações sobre estruturas, refira-se a literatura externa sobre esses tópicos.
Um array pode ser criado com o construtor de linguagem array(). Ele pega um certo número de pares separados por vírgula chave => valor .
Uma chave pode ser tanto um inteiro ou uma string. Se a chave é uma representação padrão de um inteiro, ele será interpretado assim (por exemplo, "8" será interpretado como 8, enquanto "08" será interpretado como "08").
O valor pode ser qualquer coisa.
Se omitir a chave, o maior índice inteiro é obtido, e a nova chave será esse máximo + 1. Como inteiros podem ser negativos, isto também é verdadeiro para índices negativos. Sendo, por exemplo, o maior índice -6, resultará em um novo índice -5. Se nenhum índice inteiro existir ainda, a chave será 0 (zero). Se você especifica uma chave que já possui um valor assimilada a ela, então o valor é sobrescrito.
Utilizar true como chave será interpretado como inteiro 1 na chave. Utilizando false como chave será avaliado como o inteiro 0. Usar NULL como chave é interpretado como uma string vazia. Usar uma string vazia como chave irá criar (ou sobrescerver) uma chave com uma string vazia e seu valor, e isto não é o mesmo que usar colchetes vazios.
Você não pode usar arrays ou objetos como chaves. Fazendo isso resultará em um alerta: Illegal offset type.
array( [chave =>] valor , ... ) // chave pode ser string ou integer não negativo // valor pode ser qualquer coisa |
Você pode também modificar um array existente, explicitando assimilando valores.
Isto é feito apenas assimilando valores para o array enquanto especificando a chave em colchetes. Você pode omitir a chave, colocando um par vazio de colchetes ("[]").
$arr[chave] = valor; $arr[] = valor; // chave tanto um string ou inteiro não negativo // valor pode ser qualquer coisa |
Há uma série de funções muito úteis para trabalhar com arrays, veja a seção sobre arrays .
Nota: A função unset() permite apagar chaves de um array. Esteja avisado que o array NÃO vai ser reindexado.
foreach existe especificamente para lidar com arrays. Ele provém uma maneira fácil de percorrer qualquer array.
Você sempre deve usar delimitadores em volta um índice de um array associativo. Por exemplo, utilizar $foo['bar'] e não $foo[bar]. Mas porque $foo[bar] está errado? Afinal de contas, você vê essa sintaxe nos scripts antigos:
Isto está errado, mas funciona. Então, porque está errado? A razão está neste código, que tem uma constante indefinida (bar) em vez de uma string ('bar' - repare nos delimitadores), e o PHP pode no futuro definir constantes que, infelizmente em seu código, podem ter o mesmo nome. Isto funciona, porque constantes não definidas são convertidas em uma string com o mesmo nome.Como explicado na seção sintaxe, a chave precisa estar entre colchetes ('[' e ']'). Isto significa que você pode escrever coisas como isso:
Isto é um exemplo de utilização de um valor de retorno de função como um índice de array. O PHP conhece constantes, como você deve ter visto E_* antes.$error_descriptions[E_ERROR] = "Um erro fatal ocorreu"; $error_descriptions[E_WARNING] = "O PHP emitiu um alarme"; $error_descriptions[E_NOTICE] = "Apenas um aviso informal"; |
$error_descriptions[1] = "Um erro fatal ocorreu"; $error_descriptions[2] = "O PHP emitiu um alarme"; $error_descriptions[8] = "Apenas um aviso informal"; |
Então, como é possível que $foo[bar] funcione? Funciona porque bar, na sintaxe onde é utilizada é esperada como uma expressão constante. Entretanto, nesse caso não existe constante com o nome bar. O PHP, hoje, assume que você quer bar literalmente, como a string "bar", mas que você esqueceu de escrever os delimitadores.
Se em algum ponto do futuro, o time do PHP quiser acrescentar outra constante ou palavra chave, você terá problemas. Por exemplo, se você já não pode utilizar as palavras empty e default dessa maneira, desde que elas são palavras reservadas especiais.
Nota: Quando você liga error_reporting em E_ALL, você irá ver as notícias que o PHP gera quando um índice é utilizado sem ser definido (coloque a linha error_reporting(E_ALL); em seu script).
Nota: Com strings delimitadas por aspas, uma outra sintaxe é válida. Veja interpretação de variáveis em string para mais detalhes.
O tipo array do PHP é muito versátil, por isso temos aqui alguns exemplos para mostrar todo o poder dos arrays.
// isto $a = array( 'color' => 'vermelha' , 'taste' => 'doce' , 'shape' => 'redonda' , 'name' => 'maçã' , 4 // a chave será 0 ); // isto é equivalente a acima $a['cor'] = 'vermelha'; $a['sabor'] = 'doce'; $a['formato'] = 'redonda'; $a['nome'] = 'maçã'; $a[] = 4; // a chave será 0 $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // o mesmo de array( 0 => 'a' , 1 => 'b' , 2 => 'c' ), // ou simplesmente array('a', 'b', 'c') |
Note que atualmente não se pode mudar os valores de um array diretamente dentro de um loop. Superar essa limitação é possível da seguinte forma:
Este exemplo cria um array na base 1.
Arrays são ordenados. Você pode mudar sua ordem utilizando vários funções de ordenação. Veja as funções de arrays para mais informações.
Porque o valor de um array pode ser qualquer coisa, isto pode ser outro array. Isto pode criar arrays recursivos e multidimensionais.