Arrays php Características

php array

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 valor false se almacenará como 0.
  • El valor Null se convertirá en una cadena vacía.
    • Ejemplo, la clave null se almacenará como «».
  • 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]‎$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:

&lt;? 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 baren 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&nbsp;
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.

&lt;? php 
$arr1  =  array( 2 ,  3 ); 
$arr2  =  $arr1 ; 
$arr2 []  =  4 ;  //$arr2 cambiado 
//$arr1 es matriz (2, 3)
$ arr3  =  $arr1 ; 
$ arr3 []  =  4 ; // $ arr1 = $ arr3  </em>
?>