Especificando com array()
Um array pode ser criado com o construtor de linguagem
array(). Ele leva qualquer quantidade de pares separados por vírgula
chave => valor
como argumentos.
array(
chave => valor,
chave2 => valor2,
chave3 => valor3,
...
)
A vírgula após o último elemento do array é opcional e pode ser omitida. Isso geralmente é feito
para arrays em uma única linha, por exemplo, array(1, 2) é preferível em vez de
array(1, 2, ). Para arrays escritos em várias linhas, por outro lado, a vírgula a direita do último elemento é
usada frequentemente, para permitir a adição de forma simples de novos elementos ao final.
A partir do PHP 5.4 você também pode utilizar a sintaxe contraída de array, que troca
array() por [].
Exemplo #1 Um array simples
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// a partir do PHP 5.4
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
A chave pode ser um inteiro
ou uma string. O valor pode ser
de qualquer tipo.
Adicionalmente, as seguites coerções ocorrerão a chave:
-
Strings contendo inteiros válidos, serão convertidos para o tipo
inteiro. Por exemplo, a chave"8" será, na verdade,
armazenada como 8. Entretanto, "08" não
será convertido, por não ser um inteiro decimal válido.
-
Floats também são convertidos para inteiros, isso significa que
a parte fracionada será removida. Por exemplo, a chave 8.7 será na verdade
armazenada como 8.
-
Booleanos são convertidos para inteiros, igualmente, por exemplo, a chave
true, será na verdade armazenada como 1
e a chave false como 0.
-
Null será convertido para uma string vazia, por exemplo, a chave
null na verdade será armazenada como "".
-
Arrays e objetos não podem ser usados como chaves.
Fazer isso resultará em um aviso: Illegal offset type.
Se vários elementos na declaração do array utilizam a mesma chave, apenas o último
será utilizado, enquanto todos os outros serão sobrescritos.
Exemplo #2 Exemplo de conversão de tipo e sobrescrita
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
O exemplo acima irá imprimir:
array(1) {
[1]=>
string(1) "d"
}
Como todas as chaves do exemplo acima foram convertidas para 1, o valor será sobrescrito
a cada novo elemento e o valor final atribuído "d", será o único que restará.
As chaves dos arrays no PHP podem conter, ao mesmo tempo, inteiro e string,
por que o PHP não faz distinção entre arrays indexados e associativos.
Exemplo #3 Misturando inteiro e string nas chaves
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
?>
O exemplo acima irá imprimir:
array(4) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
[100]=>
int(-100)
[-100]=>
int(100)
}
A chave é opcional. Se não for especificada, o PHP
utilizará o incremento da chave do tipo inteiro com maior valor utilizado.
Exemplo #4 Arrays indexados sem chaves
<?php
$array = array("foo", "bar", "hello", "world");
var_dump($array);
?>
O exemplo acima irá imprimir:
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hello"
[3]=>
string(5) "world"
}
É possível especificar a chave somente para alguns elementos e omití-las para outros:
Exemplo #5 Chaves em alguns elementos
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
O exemplo acima irá imprimir:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
Como pode ver, o último valor "d" foi atribuído a chave
7. Isso acontece porque a chave com maior inteiro antes dela
era 6.
Acessando elementos do array com colchetes
Elementos do array podem ser acessados utilizando a sintaxe array[chave].
Exemplo #6 Acessando elementos do array
<?php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>
O exemplo acima irá imprimir:
string(3) "bar"
int(24)
string(3) "foo"
Nota:
Tanto colchetes quanto chaves podem ser utilizados intercambiávelmente
para acessar elementos de um array (por exemplo, $array[42] e $array{42} irão
fazer a mesma coisa que o exemplo anterior).
A partir do PHP 5.4 é possível referenciar um elemento de um array como resultado de uma função ou
método chamado diretamente. Antes, era possível somente através de uma variável
temporária.
A partir do PHP 5.5 é possível referenciar elementos de um array literal.
Exemplo #7 Referenciando elemento de um array
<?php
function getArray() {
return array(1, 2, 3);
}
// on PHP 5.4
$secondElement = getArray()[1];
// previously
$tmp = getArray();
$secondElement = $tmp[1];
// or
list(, $secondElement) = getArray();
?>
Nota:
Tentativas de acesso a uma chave de array que não foi defina é
o mesmo que acessar qualquer outra variável indefinida:
uma mensagem de erro de nível E_NOTICE será
emitida, e o resultado será NULL.
Criando/modificando com a sintaxe de colchetes
Você pode também modificar um array existente explicitamente assimilando
valores a ele.
Isto é feito apenas assimilando valores para o array enquanto especifica a
chave em colchetes. Você pode omitir a chave, colocando um par vazio
de colchetes ("[]").
$arr[chave] = valor;
$arr[] = valor;
// chave pode ser tanto um integer quanto uma string
// valor pode ser qualquer valor de qualquer tipo
Se ainda $arr não existir, será criado, servindo como
alternativa para criação de um array. Entretanto, essa prática é
desencorajada por que se $arr conter
algum valor (por exemplo, uma string de uma variável de requisição), então este
valor permanecerá e o [] funcionará como
um operador de acesso
a string. Sempre será recomentado a inicialização de uma variável por atribuição
direta.
Para mudar um certo valor, apenas atribua um novo valor
para um elemento especificado por sua chave. Se você quiser
remover um par chave/valor, você precisa aplicar a função unset() nele.
Nota:
Como mencionado acima, se nenhuma chave for especificada, o maior índice inteiro é
obtido, e a nova chave será esse o máximo + 1. Se nenhum
índice inteiro existir ainda, a chave será
0 (zero).
Note que a chave inteira de maior valor utilizada não
precisa necessariamente existir no array. Ele precisa ter existido
no array em algum momento desde sua última
reindexação. Veja o seguinte exemplo: