
Los arrays o matrices en PHP son una especie de mapas ordenados, y un mapa es un tipo en el que los valores están asociados con claves, coordenadas y tienen muchos usos. Puede tratarse como una matriz, una lista (vector), una tabla hash (una tipo de mapa), un diccionario o una colección, pila, cola, etc.
Incluso los valores de la matriz pueden ser otras matrices, lo que permite la creación de matrices multidimensionales. No explicaremos todos estos tipos en esta documentación, pero encontrará al menos un ejemplo de cada uno.
Sintaxis del array php
Crea matrices usando array()
Se puede crear una matriz usando la estructura array()
, y esta estructura toma pares de claves y valores como veremos a continuación de ejemplo; key1 => value
separados por una coma para ser considerados como argumentos para esta estructura.
array( key1 => value, key2 => value2, key3 => value3, ... )
Opcionalmente, se puede agregar una coma después del último elemento de la matriz y no se recomienda para las matrices de una línea. Por ejemplo, es preferible escribir, en array(1, 2)
lugar de array(1, 2,)
, y para arreglos multilínea, es una práctica común usar la coma al final para facilitar la adición de nuevos elementos al final del arreglo.
A partir de la versión 5.4 de PHP, ahora es posible usar una sintaxis de matriz corta, usando corchetes en []
lugar de la estructura array()
.
Veamos el ejemplo siguiente de una matriz simple:
<?php $array = array( "foo" => "bar", "bar" => "foo",); //a partir de la versión 5.4 $array = [ "foo" => "bar", "bar" => "foo",]; ?>
La clave puede ser un número entero o una cadena(string) de texto y el valor puede ser de cualquier tipo.
La clave se lanza a la fuerza (es decir, se lanza) en los siguientes casos:
- Cadenas que contienen enteros decimales válidos, a menos que el número esté precedido por un signo
+
, se convertirá a un tipo entero.- Ejemplo: el valor «8» se almacenará como 8, por otro lado, «08» no se convertirá, porque no es un decimal válido entero.
- Transformará los números decimales (flotantes) a enteros también, y esto significa que cargará la parte que viene después de la coma.
- Ejemplo: el valor que se almacenará con la tecla 8,7 8.
- También convertirá booleanos en números enteros.
- Ejemplo: el valor
true
se almacenará como 1 y el valorfalse
se almacenará como 0.
- Ejemplo: el valor
- El valor Null se convertirá en una cadena vacía.
- Ejemplo, la clave
null
se almacenará como «».
- Ejemplo, la clave
- Las matrices y los objetos no se pueden usar como claves, y verá una advertencia cuando se usen.
- Advertencia: tipo de desplazamiento ilegal.
Si hay elementos en el array que tienen la misma clave, solo se usa la última clave y los demás la sobrescriben.
En el siguiente ejemplo de arrays veremos la conversión de tipos y sobrescritura de elementos.
<?php $array = array( 1 => "a", "1" => "b", 1.5 => "c", true => "d", ); var_dump($array); ?>
Los resultados del ejemplo anterior son:
array(1) { [1]=> string(1) "d" }
Todas las claves del ejemplo anterior se convierten a 1, los nuevos valores de los elementos (que tienen claves duplicadas) se sobrescribirán y el último valor «d» permanecerá asociado con la clave 1.
Puede en matrices PHP que contienen claves de texto o numéricas al mismo tiempo; Esto se debe a que PHP no distingue entre matrices indexadas y asociativas.
En el siguiente caso de array veremos el uso de teclas numéricas y de texto
<?php $array = array( "foo" => "bar", "bar" => "foo", 100 => -100, -100 => 100, ); var_dump($array); ?>
Los resultados del ejemplo anterior son:
array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }
La clave es opcional y, si no se especifica, PHP usará el valor de la última clave numérica más grande y lo agregará automáticamente.
Veamos el caso de un array o una matriz indexada sin clave
<?php $array = array("foo", "bar", "hello", "world"); var_dump($array); ?>
Los resultados del ejemplo anterior son:
array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" }
También es posible especificar claves para algunos elementos y dejar el resto, como en el siguiente ejemplo. Aquí veremos la selección de teclas para algunos elementos a continuación.
<?php $array = array( "a", "b", 6 => "c", "d", ); var_dump($array); ?>
La salida del ejemplo anterior:
array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" }
El último valor «d» se asigna a la clave 7, que se debe a que la clave entera más grande es 6.
Los elementos de un Array usando los corchetes
Se puede acceder a los elementos de la matriz utilizando array[key]
.
Ejemplo para acceder a los elementos de una matriz
<?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"]); ?>
Los resultados del ejemplo anterior son:
string(3) "bar" int(24) string(3) "foo"
Importante: Puede usar corchetes []
o llaves {}
para acceder a los elementos de la matriz (es decir, puede usar $array[50]
o $array{50}
).
A partir de PHP 5.4, ahora es posible acceder a las referencias de matrices directamente desde una función, ya que anteriormente se requerían variables temporales.
Ejemplo de asignación de puntero a un array.
<?php function getArray() { return array(1, 2, 3); } // PHP 5.4 $secondElement = getArray()[1]; $tmp = getArray(); $secondElement = $tmp[1]; list(, $secondElement) = getArray(); ?>
Importante: aparecerá un mensaje de error al intentar acceder a la clave de una matriz indefinida, ya que en el caso de acceder a una variable indefinida aparecerá un error de tipo y el E_NOTICE
resultado será NULL
.
Importante: Si a la matriz se le asignan punteros con un valor entero y no una cadena, producirá NULL
silenciosamente el valor, sin un mensaje de error.
¿ Como crear / modificar matrices usando corchetes?
Un array se puede modificar asignando un valor a una matriz con la clave entre corchetes, y la clave también se puede omitir, lo que da como resultado un par de corchetes vacíos []
.
$arr[key] = value; $arr[] = value; // La clave es un número entero o una cadena // El valor es de cualquier tipo
Tanto si array $arr
si no estuviste presente, y esta es otra forma de crear una matriz pero no recomendada, porque si la matriz $arr
contiene algunos valores como sería el caso de una cadena de texto ), este valor permanecerá y convertirá esta fórmula a la llegada del procesar a los elementos de cadena del texto en lugar de Crear una matriz (operador de acceso a cadena), y siempre es mejor inicializar una variable mediante una asignación directa.
Referencia: A partir de la versión 7.1.0, el uso de un operador de índice []
vacío en una cadena de texto dará como resultado un mensaje de error, ya que la cadena se convirtió previamente en una matriz.
Para cambiar un valor de los valores en la matriz, asigne un nuevo valor a ese elemento usando su clave, y para eliminar un par clave / valor, use el unset()
.
<?php $arr = array(5 => 1, 12 => 2); // Esta expresión es similar a la expresión // $ arr [13] = 56; // En este punto $arr[] = 56; // Esta expresión agregará un nuevo elemento a la matriz // con la clave x $arr["x"] = 42; // Esta expresión eliminará un elemento de la matriz unset($arr[5]); // Esta expresión actualizará toda la matriz</em> unset($arr); ?>
Como se mencionó anteriormente, si no se especifica una clave en particular, el valor de la clave más grande se tomará como un número entero, y la nueva clave será el valor de la clave más grande + 1 (debe ser al menos 0), si no se han creado claves pero será 0.
Tenga en cuenta que es posible que el valor de clave más grande no exista actualmente en la matriz, puede existir antes después del último reindexado de la matriz, persistirá incluso después de que se haya eliminado como en el siguiente ejemplo:
<? php //Crea una matriz simple. $array = array(1, 2, 3, 4, 5); print_r($array); // Elimina todos los elementos sin cambiar las propiedades de la matriz foreach ($array as $i => $value) { unset($array[$i]); } print_r($array); // agregue un elemento, tenga en cuenta que la nueva clave es 5 en lugar de 0 $array[] = 6; print_r($array); // reindexación $array = array_values($array); $array[] = 7; print_r($array); ?>
Los resultados del ejemplo anterior son:
Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5) Array() Array( [5] => 6) Array( [0] => 6 [1] => 7)
Funciones útiles
Hay muchas funciones útiles para trabajar con matrices, consulte la sección Funciones de matriz.
Importante: Una función le permite unset()
eliminar claves de una matriz, pero tenga en cuenta que la matriz no se volverá a indexar, si desea eliminar con reindexación, la matriz se puede volver a indexar utilizando la extensión array_values()
.
<?php $a = array(1 => 'one', 2 => 'two', 3 => 'three'); unset($a[2]); / * producirá una matriz definida como esta $a = array(1 => 'one', 3 => 'three'); no $a = array(1 => 'one', 2 =>'three'); <nowiki>*</nowiki>/ $b = array_values($a); //array(0 => 'one', 1 =>'three') ?>
Utiliza una estructura foreach
específica para matrices, proporciona una manera fácil de iterar dentro de la matriz.
No use el formulario $foo[bar]
Utilice siempre comillas alrededor del índice de la matriz, que tiene la forma de una cadena de texto, que es correcta en la escritura en lugar $foo['bar']
de $foo[bar]
, y tal vez encuentre una fórmula común en estos antiguos scripts:
<?php $foo[bar] = 'enemy'; echo $foo[bar]; ?>
Aunque el código anterior es incorrecto, funciona, la razón es que este código tiene una constante indefinida que es en bar
lugar de la cadena de texto ( "bar"
tenga en cuenta las dos comillas que rodean la palabra), PHP convierte automáticamente la cadena de texto sin formato (que no contiene comillas y no coincide con ningún símbolo conocido) a una cadena que contiene la cadena sin procesar, por ejemplo, si no hay una constante definida como bar
, se convertirá en la cadena "bar"
.
Esto no significa que siempre debas poner comillas, no las pongas en constantes y variables , porque eso evita que se interpreten:
<?php error_reporting(E_ALL); ini_set('display_errors', true); ini_set('html_errors', false); // matriz simple $array = array(1, 2); $count = count($array); for ($i = 0; $i < $count; $i++) { echo "\nChecking $i: \n"; echo "Bad: " . $array['$i'] . "\n"; echo "Good: " . $array[$i] . "\n"; echo "Bad: {$array['$i']}\n"; echo "Good: {$array[$i]}\n"; } ?>
Los resultados del ejemplo anterior son:
Checking 0: Notice: Undefined index: $i in /path/to/script.html on line 9 Bad: Good: 1 Notice: Undefined index: $i in /path/to/script.html on line 11 Bad: Good: 1 Checking 1: Notice: Undefined index: $i in /path/to/script.html on line 9 Bad: Good: 2 Notice: Undefined index: $i in /path/to/script.html on line 11 Bad: Good: 2
Más ejemplos de este comportamiento:
<? php // mostrar todos los errores</em> error_reporting(E_ALL); $arr = array('fruit' => 'apple', 'veggie' => 'carrot'); // Cierto</em> print $arr['fruit']; // apple print $arr['veggie']; // carrot // Error. La siguiente expresión funcionará pero obtendrá un error de tipo // E_NOTICE // porque la constante no está definida // Aviso: Uso de una constante de fruta indefinida - suponga 'fruta' en ... print $arr[fruit]; // apple // Conoceremos una constante para mostrar lo que está pasando. define('fruit', 'veggie'); // nota la diferencia ahora print $arr['fruit']; // apple print $arr[fruit]; // carrot // La siguiente línea es válida porque está dentro de la cadena // El intérprete no buscará constantes dentro de la cadena y no habrá error de tipo // E_NOTICE print "Hello $arr[fruit]"; // Hello apple // Con una excepción: las llaves que rodean una matriz dentro de cadenas permiten la interpretación de constantes. print "Hello {$arr[fruit]}"; // Hello carrot print "Hello {$arr['fruit']}"; // Hello apple // Esto no funcionará //Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING' print "Hello $arr['fruit']"; print "Hello $_GET['foo']"; // Otras opciones: Fusionar cadenas print "Hello " . $arr['fruit']; // Hello apple ?>
Cuando establece un valor error_reporting
para mostrar errores de nivel E_NOTICE
configurándose en E_ALL
, los errores anteriores se muestran inmediatamente. Recuerde que error_reporting
está configurado para no mostrar alertas de tipo NOTICE
.
Como se mencionó en la sección de sintaxis general, una expresión debe colocarse entre corchetes []
, es decir, el siguiente código funcionará:
<?php echo $arr[somefunc($bar)]; ?>
Usamos el valor de retorno de una función como índice de la matriz en el ejemplo anterior.
PHP también puede interpretar constantes cuando están entre paréntesis:
<?php $error_descriptions[E_ERROR] = "A fatal error has occurred"; $error_descriptions[E_WARNING] = "PHP issued a warning"; $error_descriptions[E_NOTICE] = "This is just an informal notice"; ?>
Tenga en cuenta que E_ERROR
es un identificador válido, como bar
en el primer ejemplo, y el último ejemplo es similar al siguiente:
<?php $error_descriptions[1] = "A fatal error has occurred"; $error_descriptions[2] = "PHP issued a warning"; $error_descriptions[8] = "This is just an informal notice"; ?>
Eso es porque es E_ERROR
igual a 1, …
¿Por qué es esto malo entonces?
En el futuro, el equipo de PHP puede agregar otra constante o una nueva palabra reservada, y puede haber una constante en otro código que puede interferir con el código existente, por ejemplo, es incorrecto usar vacío y predeterminado de esta manera porque están reservados. palabras.
Importante: Recuerde que las comillas pueden abandonarse al intentar acceder a los elementos de una matriz dentro de una cadena de texto entre comillas dobles. Es decir, la expresión es "$foo[bar]"
correcta.
Consulte los ejemplos anteriores para obtener más información.
Conversión de matriz
El resultado de la conversión de números enteros y decimales y cadenas de texto , y los valores y recursos booleanos es una matriz con un solo elemento en la primera ubicación (es decir, índice 0) con el valor inicial que se ha convertido, en otras palabras, (array) $scalarValue
son lo mismo array($scalarValue)
.
El resultado de convertir un objeto en una matriz es una matriz de las propiedades del objeto, ya que las claves son los nombres de las variables miembro del objeto, pero hay algunas excepciones notables: las propiedades escalares no son accesibles y los nombres de las variables del nombre de la clase tener un prefijo, y los nombres de las variables protegidas se prefijarán con el símbolo «*».
Estos valores están encerrados en un byte nulo antes o después de ellos y pueden dar lugar a un comportamiento inesperado en algunos casos:
<?php class A { private $A; // '\0A\0A' } class B extends A { private $A; // '\0B\0A' public $AA; // 'AA' } var_dump((array) new B()); ?>
Le parecerá que habrá dos claves con un nombre "AA"
, pero de hecho encontrará que una de ellas se llama "\0A\0A"
.
Si intentamos convertir NULL en una matriz, el resultado será una matriz vacía.
Comparación
Puede comparar matrices usando la función array_diff()
más coeficientes de array.
Ejemplos de
Las matrices(arrays) en PHP son muy diversas y aquí hay algunos ejemplos.
<? php $a = array( 'color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 'name' => 'apple', 4 //key will be 0 ); $b = array('a', 'b', 'c'); //se parece al siguiente $a = array(); $a['color'] = 'red'; $a['taste'] = 'sweet'; $a['shape'] = 'round'; $a['name'] = 'apple'; $a[] = 4; // la clave será 0 $b = array(); $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // Después de ejecutar el código anterior, el array se verá así // $a: // array('color' => 'rojo', 'sabor' => 'dulce', 'forma' => 'redondo', // 'nombre' => 'manzana', 0 => 4), // $b // array(0 => 'a', 1 => 'b', 2 => 'c') // o simplemente // array('a', 'b', 'c ')').> ?>
Ejemplo Colección
<?php $colors = array('red', 'blue', 'green', 'yellow'); foreach ($colors as $color) { echo "Do you like $color?\n"; } ?>
Ejemplo del uso array()
<?php // (property-)map $map = array( 'version' => 4, 'OS' => 'Linux', 'lang' => 'english', 'short_tags' => true ); // matriz con teclas numéricas $array = array( 7, 8, 0, 156, -10 ); // lo anterior es equivalente a // array(0 => 7, 1 => 8, ...) $switching = array( 10, //clave = 0 5 => 6, 3 => 7, 'a' => 4, 11, // clave = 6, la clave entera más grande era 5 '8' => 2, // clave = 8, que es un número entero '02' => 77, // clave = '02' cualquier cadena de texto 0 => 12 // El valor asociado con el índice 0 será 12 en lugar de 10 ); // array vacía $empty = array(); ?>
Ejemplo de array para coloca el cursor sobre los elementos con foreach
<?php $colors = array('red', 'blue', 'green', 'yellow'); foreach ($colors as $color) { echo "Do you like $color?\n"; } ?>
Los resultados del ejemplo anterior son:
Do you like red? Do you like blue? Do you like green? Do you like yellow?
Puede cambiar el valor de una matriz directamente desplazándose por referencia.
Ejemplo para cambiar un elemento en el bucle
<?php foreach ($colors as &$color) { $color = strtoupper($color); } unset($color); print_r($colors); ?>
Los resultados del ejemplo anterior son:
Array ( [0] => RED [1] => BLUE [2] => GREEN [3] => YELLOW )
Este ejemplo creará una matriz que comienza con 1.
Ejemplo de un array que comienza con la primera posición
<?php $firstquarter = array(1 => 'January', 'February', 'March'); print_r($firstquarter); ?>
La salida del ejemplo anterior:
Array( [1] => 'January' [2] => 'February' [3] => 'March' )
Ejemplo para completar la matriz
<? php // Rellena la matriz con los elementos de la carpeta $handle = opendir('.'); while (false !== ($file = readdir($handle))) { $files[] = $file; } closedir($handle); ?>
Las matrices están ordenadas y el orden se puede cambiar usando diferentes funciones de clasificación y orden. Puede ver la sección Funciones de matriz para obtener más información; la función se puede usar como el count()
número de elementos en una matriz.
Ejemplo práctico para ordenar un array
<?php sort($files); print_r($files); ?>
Una matriz puede constar de cualquier cosa, incluidas otras matrices, y esto permite la creación de matrices multidimensionales e iterativas.
Ejemplo sencillo de matrices multidimensionales y recursivas
<?php $fruits = array ( "fruits" => array ( "a" => "orange", "b" => "banana", "c" => "apple" ), "numbers" => array ( 1, 2, 3, 4, 5, 6 ), "holes" => array ( "first", 5 => "second", "third" ) ); //Algunos ejemplos de las direcciones de los valores en la matriz anterior echo $fruits["holes"][5]; //imprime "segundo" echo $fruits["fruits"]["a"];//imprime "naranja" unset($fruits["holes"][0]);//eliminar "primero" //Crea una nueva matriz multidimensional $juices["apple"]["green"] = "good"; ?>
Las operaciones de copia de array implican la copia de valores. El operador de referencia se puede utilizar para copiar el array por referencia.
<? php $arr1 = array( 2 , 3 ); $arr2 = $arr1 ; $arr2 [] = 4 ; //$arr2 cambiado //$arr1 es matriz (2, 3) $ arr3 = $arr1 ; $ arr3 [] = 4 ; // $ arr1 = $ arr3 </em> ?>
- Ajustes y Configuraciones del Lenguaje PHP
- Sintaxis del Lenguaje PHP
- Tipos de Datos que encontramos en PHP
- Las Variables en PHP
- Constantes en PHP
- Operadores en PHP
- Expresiones en PHP
- Estructuras de Control en PHP
- Características del if en PHP
- Características de else en PHP
- Características del elseif en PHP
- Características del while en PHP
- Características del do-while en PHP
- Características del for en PHP
- Características del foreach en PHP
- Características del break en PHP
- Características del switch php
- Características de continue en PHP
- Declare php Características
- Arrays php Características
- Tipos de Funciones String en PHP
- Addcslashes() en PHP Características
- Función chunk_split() PHP Características
- Función addslashes() PHP Características
- Función convert_uuencode() PHP Características
- Función chr() en PHP Características
- Función echo PHP Características