diff --git a/language/types/array.xml b/language/types/array.xml index 61064c001..c7289b133 100644 --- a/language/types/array.xml +++ b/language/types/array.xml @@ -1,6 +1,6 @@ - + @@ -31,8 +31,8 @@ Un array puede ser creado con el constructor del lenguaje array. Éste toma cualquier número de parejas - clave => valor - como argumentos. + clave => valor, + separados por comas, como argumentos. @@ -52,7 +52,7 @@ - A partir de PHP 5.4 también se puede usar la sintaxis de array corta, la cual reemplaza + Existe una sintaxis de array corta, la cual reemplaza array() con []. @@ -66,7 +66,7 @@ $array = array( "bar" => "foo", ); -// a partir de PHP 5.4 +// Usando la sintaxis corta $array = [ "foo" => "bar", "bar" => "foo", @@ -77,16 +77,16 @@ $array = [ - La clave puede ser un integer - o un string. El valor puede ser - de cualquier tipo. + La clave puede ser un integer (entero) + o un string (una cadena de texto). El valor + puede ser de cualquier tipo. Además, se darán los siguientes amoldamientos de clave: - + Strings que contiene un decimal válido integer, a menos que el número esté precedido por un signo +, será amoldado al tipo integer. Por ejemplo, la llave "8" será en realidad almacenado como 8. Por otro lado "08" no será @@ -115,7 +115,8 @@ $array = [ - Los arrays y los objects no pueden utilizarse como claves. + Los arrays y los objects no se pueden + utilizar como claves. Si se hace, dará lugar a una advertencia: Illegal offset type. @@ -158,7 +159,7 @@ array(1) { - Los arrays de PHP pueden contener claves integer y string al mismo tiempo + Los arrays de PHP pueden contener claves integer y string al mismo tiempo ya que PHP no distingue entre arrays indexados y asociativos. @@ -266,6 +267,108 @@ array(4) { 6. + + + Ejemplo de Conversión y Sobrescritura de tipos complejos + + Este ejemplo incluye todas las variaciones de conversión de tipos de claves + y sobrescritura de elementos. + + + 'a', + '1' => 'b', // El valor "a" será sobrescrito por "b" + 1.5 => 'c', // El valor "b" será sobrescrito por "c" + -1 => 'd', + '01' => 'e', // Al no tratarse de un entero en un string, este NO sobrescribirá la clave 1 + '1.5' => 'f', // Al no tratarse de un entero en un string, este NO sobrescribirá la clave 1 + true => 'g', // El valor "c" será sobrescrito por "g" + false => 'h', + '' => 'i', + null => 'j', // El valor "i" será sobrescrito por "j" + 'k', // El valor "k" será asignado a la clave 2. Esto es porque la clave entero más grande hasta el momento es 1 + 2 => 'l', // El valor "k" será sobrescrito por "l" +); + +var_dump($array); +?> +]]> + + &example.outputs; + + + string(1) "g" + [-1]=> + string(1) "d" + ["01"]=> + string(1) "e" + ["1.5"]=> + string(1) "f" + [0]=> + string(1) "h" + [""]=> + string(1) "j" + [2]=> + string(1) "l" +} +]]> + + + + + Ejemplo de índice negativo + + Cuando asignas una clave entera negativa n, PHP se encargará de + asignar la siguiente clave a n+1. + + + +]]> + + &example.outputs; + + + int(1) + [-4]=> + int(2) +} +]]> + + + + + Antes de PHP 8.3.0, asignar una clave entera negativa n + asignaría la siguiente clave a 0, el ejemplo anterior + por lo tanto mostraría: + + + + + int(1) + [0]=> + int(2) +} +]]> + + + + @@ -308,22 +411,13 @@ string(3) "foo" - Tanto los corchetes como las llaves pueden ser utilizados de forma intercambiable + Antes de PHP 8.0.0, 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). + La sintaxis de llaves se ha marcado como obsoleta en PHP 7.4.0 y se ha eliminado en PHP 8.0.0. - - 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. - - Hacer referencia al resultado array de funciones @@ -333,15 +427,7 @@ function getArray() { return array(1, 2, 3); } -// en PHP 5.4 $secondElement = getArray()[1]; - -// anteriormente -$tmp = getArray(); -$secondElement = $tmp[1]; - -// o -list(, $secondElement) = getArray(); ?> ]]> @@ -351,14 +437,17 @@ list(, $secondElement) = getArray(); 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, + se emitirá un mensaje de error de nivel E_WARNING + (E_NOTICE antes de PHP 8.0.0), y el resultado será &null;. - + Array que dereferencia un valor escalar que no es un string - silenciosamente arroja &null;, es decir, sin emitir un mensaje de error. + arroja &null;. Antes de PHP 7.4.0, sin emitir un mensaje de error. + Desde PHP 7.4.0, emite un error de nivel E_NOTICE; + desde PHP 8.0.0, emite un error de nivel E_WARNING; @@ -373,8 +462,8 @@ list(, $secondElement) = getArray(); 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 ([]). + clave entre corchetes. La clave también se puede omitir, resultando en un par + de corchetes vacíos ([]). @@ -395,15 +484,21 @@ list(, $secondElement) = getArray(); - A partir de PHP 7.1.0, la aplicación del operador de índice vacío en un string lanza un fatal - error. Antes, el string se convertía silenciosamente en un array. + Desde PHP 7.1.0, aplicar el operador de índice vacío en un string lanza un error + fatal. Antes, el string se convertía silenciosamente en un array. + + + + + Desde PHP 8.1.0, la creación de un array a partir de &false; está obsoleta. + Aún se permite crear un array a partir de &null; y valores no definidos. - 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. + 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. @@ -496,6 +591,141 @@ Array + + + Desestructuración de arrays + + + Los arrays pueden ser desestructurados usando [] + (desde PHP 7.1.0) o mediante el constructor de lenguaje list. + Estos constructores se pueden utilizar para desestructurar un array en distintas variables. + + + + + +]]> + + + + + La desestructuración de arrays también puede ser utilizada en &foreach; para + desestructurar un array multidimensional mientras se itera sobre él. + + + + + +]]> + + + + + Se pueden ignorar elementos de un array al no proporcionar una variable. + La desestructuración de arrays siempre comienza en el índice 0. + + + + + +]]> + + + + + Desde PHP 7.1.0, los arrays asociativos también pueden ser desestructurados. + Esto permite una selección más fácil del elemento correcto en arrays indexados + Esto también permite una selección más fácil del elemento correcto en arrays indexados + numéricamente, ya que el índice se puede especificar explícitamente. + + + + + 1, 'bar' => 2, 'baz' => 3]; + +// Asignamos el elemento de índice 'baz' a la variable $three +['baz' => $three] = $source_array; + +echo $three; // Imprime 3 + +$source_array = ['foo', 'bar', 'baz']; + +// Assign the element at index 2 to the variable $baz +[2 => $baz] = $source_array; + +echo $baz; // Imprime "baz" +?> +]]> + + + + + La desestructuración de arrays se puede utilizar para intercambiar fácilmente dos variables. + + + + + +]]> + + + + + + El operador spread de propagación (...) + no se admite en las asignaciones. + + + + + + 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_WARNING + (E_NOTICE antes de PHP 8.0.0), + y el resultado será &null;. + + + + @@ -508,7 +738,7 @@ Array - La función unset permite remover claves de un + La función unset permite eliminar claves de un array. Tenga en cuenta que el array no es re-indexado. Si se desea un verdadero comportamiento "eliminar y desplazar", el array puede ser re-indexado usando la función array_values. @@ -535,9 +765,8 @@ $b = array_values($a); - La estructura de control &foreach; - existe específicamente para arrays. Ésta provee una manera fácil - de recorrer un array. + La estructura de control &foreach; existe específicamente para arrays. + Ésta provee una manera fácil de recorrer un array. @@ -578,9 +807,12 @@ echo $foo[bar]; - La alternativa de tratar una constante indefinida como string vacío está obsoleto a partir - de PHP 7.2.0, y emite un error de nivel E_WARNING. - Anteriormente, un error de nivel E_NOTICE era emitido. + La alternativa de tratar una constante indefinida como string vacío genera un error + de nivel E_NOTICE. + Este comportamiento está obsoleto desde PHP 7.2.0, y emite un error + de nivel E_WARNING. + Desde PHP 8.0.0, ha sido eliminado y lanza una + excepción Error. @@ -721,7 +953,7 @@ echo $arr[somefunc($bar)]; @@ -739,7 +971,7 @@ $error_descriptions[E_NOTICE] = "Esta es una noticia informal"; @@ -793,12 +1025,13 @@ $error_descriptions[8] = "Esta es una noticia informal"; Si convierte un object a un array, el resultado es un array cuyos elementos son las propiedades del object. Las claves son los nombres de las variables miembro, con algunas excepciones - notables: las variables privadas tienen el nombre de la clase al comienzo + notables: Las propiedades integer son inaccesibles; + las variables privadas tienen el nombre de la clase al comienzo del nombre de la variable; las variables protegidas tienen un caracter '*' al comienzo del nombre de la variable. Estos valores adicionados al - inicio tienen bytes NUL a los lados. - Las propiedades tipificadas no inicializadas - se descartan silenciosamente. + inicio tienen bytes NUL en cualquier lado. + Las propiedades tipificadas + no inicializadas se descartan silenciosamente. @@ -807,18 +1040,67 @@ $error_descriptions[8] = "Esta es una noticia informal"; {1} = null; + } +} + +var_export((array) new A()); +?> +]]> + + &example.outputs; + + NULL, + '' . "\0" . '*' . "\0" . 'C' => NULL, + 'D' => NULL, + 1 => NULL, +) +]]> + + + + + Estos NUL pueden generar algún comportamiento inesperado: + + + + + ]]> + &example.outputs; + + + NULL + ["AA"]=> + NULL + ["AA"]=> + NULL +} +]]> + @@ -842,24 +1124,24 @@ var_dump((array) new B()); - Array unpacking + Desempaquetando arrays - An array prefixed by ... will be expanded in place during array definition. - Only arrays and objects which implement Traversable can be expanded. - Array unpacking with ... is available as of PHP 7.4.0. + Un array precedido por ... será expandido en su lugar durante la definición del array. + Solo los arrays y objetos que implementan Traversable pueden ser expandidos. + El desempaquetado de arrays con el operador ... está disponible desde PHP 7.4.0. - It's possible to expand multiple times, and add normal elements before or after the ... operator: + Es posible desempaquetar múltiples veces, y añadir elementos normales antes o después del operador ...: - Simple array unpacking + Desempaquetado simple de array 'd']; //['a', 'b', 'c' => 'd'] - Unpacking an array with the ... operator follows the semantics of the array_merge function. - That is, later string keys overwrite earlier ones and integer keys are renumbered: + Desempaquetando un array con el operador ... sigue la semántica + de la función array_merge. + Es decir, las claves de los arrays desempaquetados se reindexan si son numéricas + y se sobrescriben si son cadenas: - Array unpacking with duplicate key + Desempaquetado arrays con claves duplicadas 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6] -// where the original integer keys have not been retained. +// Que es [0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6] +// Donde no se han conservado las claves enteras originales. ?> ]]> @@ -906,13 +1190,13 @@ var_dump($arr6); // [1, 2, 3, 4, 5, 6] - Keys that are neither integers nor strings throw a TypeError. - Such keys can only be generated by a Traversable object. + Las claves que no son números enteros ni cadenas lanzan un TypeError. + Estas claves solo pueden generarse mediante un objeto Traversable. - Prior to PHP 8.1, unpacking an array which has a string key is not supported: + Antes de PHP 8.1, no se permitía desempaquetar un array que tuviera una clave de tipo string: @@ -1059,8 +1343,8 @@ foreach ($colors as $color) { foreach ($colors as &$color) { $color = strtoupper($color); } -unset($color); /* se asegura de que escrituras subsiguientes a $color -no modifiquen el último elemento del arrays */ +unset($color); /* Se asegura de que escrituras subsiguientes a $color +no modifiquen el último elemento del array */ print_r($colors); ?> @@ -1171,9 +1455,9 @@ $fruits = array ( "fruits" => array ( "a" => "orange", ); // Algunos ejemplos que hacen referencia a los valores del array anterior -echo $fruits["holes"][5]; // prints "second" -echo $fruits["fruits"]["a"]; // prints "orange" -unset($fruits["holes"][0]); // remove "first" +echo $fruits["holes"][5]; // Imprime "second" +echo $fruits["fruits"]["a"]; // Imprime "orange" +unset($fruits["holes"][0]); // Elimina "first" // Crear una nueva array multi-dimensional $juices["apple"]["green"] = "good";