Especificación con array()
Un array puede ser creado con el constructor del lenguaje
array(). Éste toma cualquier número de parejas
clave => valor
como argumentos.
array(
clave => valor,
clave2 => valor2,
clave3 => valor3,
...
)
La coma después del último elemento del array es opcional, pudiéndose omitir. Esto normalmente se hace
para arrays de una única línea, es decir, es preferible array(1, 2) que
array(1, 2, ). Por otra parte, para arrays multilínea, la coma final
se usa frecuentemente, ya que permite una adición más sencilla de nuevos elementos al final.
A partir de PHP 5.4 también se puede usar la sintaxis de array corta, la cual reemplaza
array() con [].
Ejemplo #1 Un array simple
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// a partir de PHP 5.4
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
La clave puede ser un integer
o un string. El valor puede ser
de cualquier tipo.
Además, se darán los siguientes amoldamientos de clave:
-
Un strings que contenga un integer válido será amoldado
al tipo integer. P.ej. la clave "8" en realidad será
almacenada como 8. Por otro lado "08" no será
convertido, ya que no es un número integer decimal válido.
-
Un floats también será amoldado a integer, lo que significa que la
parte fraccionaria se elimina. P.ej., la clave 8.7 en realidad será
almacenada como 8.
-
Un booleano son amoldados a integers también, es decir, la clave
true en realidad será almacenada como 1
y la clave false como 0.
-
Un null será amoldado a un string vacío, es decir, la clave
null en realidad será almacenada como "".
-
Los arrays y los objects no pueden utilizarse como claves.
Si se hace, dará lugar a una advertencia: Illegal offset type.
Si varios elementos en la declaración del array usan la misma clave, sólo se utilizará
la última, siendo los demás son sobrescritos.
Ejemplo #2 Ejemplo de amoldamiento de tipo y sobrescritura
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
El resultado del ejemplo sería:
array(1) {
[1]=>
string(1) "d"
}
Como todas las claves en el ejemplo anterior se convierten en 1, los valores serán sobrescritos
en cada nuevo elemento, por lo que el último valor asignado "d" es el único que queda.
Los arrays de PHP pueden contener claves integer y string al mismo tiempo
ya que PHP no distingue entre arrays indexados y asociativos.
Ejemplo #3 Claves mixtas integer y string
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
?>
El resultado del ejemplo sería:
array(4) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
[100]=>
int(-100)
[-100]=>
int(100)
}
La clave es opcional. Si no se especifica, PHP usará
el incremento de la clave de tipo integer mayor utilizada anteriormente.
Ejemplo #4 Arrays indexados sin clave
<?php
$array = array("foo", "bar", "hello", "world");
var_dump($array);
?>
El resultado del ejemplo sería:
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hello"
[3]=>
string(5) "world"
}
Es posible especificar la clave sólo para algunos elementos y excluir a los demás:
Ejemplo #5 Claves no en todos los elementos
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
El resultado del ejemplo sería:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
Como se puede ver, al último valor "d" se le asignó la clave
7. Esto es debido a que la mayor clave integer anterior era
6.
Acceso a elementos de array con la sintaxis de corchete
Los elementos de array se pueden acceder utilizando la sintaxis array[key].
Ejemplo #6 Acceso a elementos de un 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"]);
?>
El resultado del ejemplo sería:
string(3) "bar"
int(24)
string(3) "foo"
Nota:
Tanto los corchetes como las llaves pueden ser utilizados de forma intercambiable
para acceder a los elementos de un array (p.ej.: $array[42] y $array{42}
tendrán el mismo resultado en el ejemplo anterior).
A partir de PHP 5.4 es posible hacer referencia al array del resultado de una llamada a una función
o método directamente. Antes sólo era posible utilizando una variable
temporal.
Desde PHP 5.5 es posible hacer referencia directa un elemento de un array literal.
Ejemplo #7 Hacer referencia al resultado array de funciones
<?php
function getArray() {
return array(1, 2, 3);
}
// en PHP 5.4
$secondElement = getArray()[1];
// anteriormente
$tmp = getArray();
$secondElement = $tmp[1];
// o
list(, $secondElement) = getArray();
?>
Nota:
Intentar acceder a una clave de un array que no se ha definido es
lo mismo que el acceder a cualquier otra variable no definida:
se emitirá un mensaje de error de nivel E_NOTICE,
y el resultado será NULL.
Creación/modificación con la sintaxis de corchete
Un array existente puede ser modificado estableciendo explícitamente valores
en él.
Esto se realiza asignando valores al array, especificando la
clave entre corchetes. Esta también se puede omitir, resultando en un par de
corchetes vacíos ([]).
$arr[clave] = valor;
$arr[] = valor;
// clave puede ser un integer o un string
// valor puede ser cualquier valor de cualquier tipo
Si $arr aún no existe, se creará, siendo también esta
forma una alternativa de crear un array. Sin embargo, se
desaconsejada esta práctica porque que si $arr ya contiene
algún valor (p.ej. un string de una variable de petición), este
estará en su lugar y [] puede significar realmente
el operador de acceso a
cadenas. Siempre es mejor inicializar variables mediante una asignación
directa.
Para cambiar un valor determinado
se debe asignar un nuevo valor a ese elemento empleando su clave. Para quitar una
pareja clave/valor, se debe llamar a la función unset() con éste.
Nota:
Como se mencionó anteriormente, si no se especifica una clave, se toma el máximo
de los índices integer existentes, y la nueva clave será ese valor
máximo más 1 (aunque al menos 0). Si todavía no existen índices integer,
la clave será 0 (cero).
Tenga en cuenta que la clave integer máxima utilizada para éste no es necesario que
actualmente exista en el array. Ésta sólo debe haber existido en el
array en algún momento desde la última vez que el array fué re-indexado.
El siguiente ejemplo ilustra este comportamiento: