Funciones útiles

Existe un buen número de funciones útiles para trabajar con matrices. Consulte la sección funciones de matrices.

Nota: La función unset() le permite remover la definición de claves de una matriz. Tenga en cuenta que la matriz NO es re-indexada. Si sólo usa "índices enteros comunes" (comenzando desde cero, incrementando en uno), puede conseguir el efecto de re-indexación usando array_values().


<?php
$a 
= array(=> 'uno'=> 'dos'=> 'tres');
unset(
$a[2]);/* producira una matriz que hubiera sido definida como
   $a = array(1 => 'uno', 3 => 'tres');
   y NO
   $a = array(1 => 'uno', 2 =>'tres');
*/
$b array_values($a);// Ahora $b es array(0 => 'uno', 1 =>'tres')?>


La estructura de control foreach existe específicamente para las matrices. Ésta provee una manera fácil de recorrer una matriz.

Recomendaciones sobre matrices y cosas a evitar

¿Porqué es incorrecto $foo[bar]?

Siempre deben usarse comillas alrededor de un índice de matriz tipo cadena literal. Por ejemplo, use $foo['bar'] y no $foo[bar]. ¿Pero qué está mal en $foo[bar]? Es posible que haya visto la siguiente sintaxis en scripts viejos:


<?php
$foo
[bar] = 'enemigo';
echo 
$foo[bar];// etc?>

Esto está mal, pero funciona. Entonces, ¿porqué está mal? La razón es que este código tiene una constante indefinida (bar) en lugar de una cadena ('bar' - note las comillas), y puede que en el futuro PHP defina constantes que, desafortunadamente para su código, tengan el mismo nombre. Funciona porque PHP automáticamente convierte una cadena pura (una cadena sin comillas que no corresponda con símbolo conocido alguno) en una cadena que contiene la cadena pura. Por ejemplo, si no se ha definido una constante llamada bar, entonces PHP reemplazará su valor por la cadena 'bar' y usará ésta última.

Nota: Esto no quiere decir que siempre haya que usar comillas en la clave. No querrá usar comillas con claves que sean constantes o variables, ya que en tal caso PHP no podrá interpretar sus valores.


<?php
error_reporting
(E_ALL);ini_set('display_errors'true);ini_set('html_errors'false);// Matriz simple:$matriz = array(12);$conteo count($matriz);
for (
$i 0$i $conteo$i++) {
    echo 
"\nRevisando $i: \n";
    echo 
"Mal: " $matriz['$i'] . "\n";
    echo 
"Bien: " $matriz[$i] . "\n";
    echo 
"Mal: {$matriz['$i']}\n";
    echo 
"Bien: {$matriz[$i]}\n";
}
?>

Nota: El resultado del ejemplo seria:
Revisando 0: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Mal: 
Bien: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Mal: 
Bien: 1

Revisando 1: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Mal: 
Bien: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Mal: 
Bien: 2
Más ejemplos para demostrar este hecho:


<?php// Mostrar todos los erroreserror_reporting(E_ALL);
$matriz = array('fruta' => 'manzana''vegetal' => 'zanahoria');
// Correctoprint $matriz['fruta'];   // manzanaprint $matriz['vegetal']; // zanahoria

// Incorrecto. Esto funciona pero tambi&eacute;n genera un error de PHP de
// nivel E_NOTICE ya que no hay definida una constante llamada fruta
//
// Notice: Use of undefined constant fruta - assumed 'fruta' in...
print $matriz[fruta];    // manzana

// Definamos una constante para demostrar lo que pasa. Asignaremos el
// valor 'vegetal' a una constante llamada fruta.
define('fruta''vegetal');
// Note la diferencia ahoraprint $matriz['fruta'];  // manzanaprint $matriz[fruta];    // zanahoria

// Lo siguiente esta bien ya que se encuentra al interior de una
// cadena. Las constantes no son procesadas al interior de
// cadenas, asi que no se produce un error E_NOTICE aqui
print "Hola $matriz[fruta]";  // Hola manzana

// Con una excepcion, los corchetes que rodean las matrices al
// interior de cadenas permiten el uso de constantes
print "Hola {$matriz[fruta]}";    // Hola zanahoriaprint "Hola {$matriz['fruta']}";  // Hola manzana

// Esto no funciona, resulta en un error de interprete como:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// Esto se aplica tambien al uso de autoglobales en cadenas, por supuesto
print "Hola $matriz['fruta']";
print 
"Hola $_GET['foo']";
// La concatenacion es otra opcionprint "Hola " $matriz['fruta']; // Hola manzana?>


Cuando habilita error_reporting() para mostrar errores de nivel E_NOTICE (como por ejemplo definiendo el valor E_ALL) verá estos errores. Por defecto, error_reporting se encuentra configurado para no mostrarlos.
Tal y como se indica en la sección de sintaxis, debe existir una expresión entre los corchetes cuadrados ('[' y ']'). Eso quiere decir que puede escribir cosas como esta:


<?phpecho $matriz[alguna_funcion($bar)];?>

Este es un ejemplo del uso de un valor devuelto por una función como índice de matriz. PHP también conoce las constantes, tal y como ha podido apreciar aquellas E_* antes.


<?php
$descripciones_de_error
[E_ERROR]   = "Un error fatal ha ocurrido";$descripciones_de_error[E_WARNING] = "PHP produjo una advertencia";$descripciones_de_error[E_NOTICE]  = "Esta es una noticia informal";?>

Note que E_ERROR es también un identificador válido, asi como bar en el primer ejemplo. Pero el último ejemplo es equivalente a escribir:


<?php
$descripciones_de_error
[1] = "Un error fatal ha ocurrido";$descripciones_de_error[2] = "PHP produjo una advertencia";$descripciones_de_error[8] = "Esta es una noticia informal";?>

ya que E_ERROR es igual a 1, etc.

Tal y como lo hemos explicado en los anteriores ejemplos, $foo[bar] aun funciona pero está mal. Funciona, porque debido a su sintaxis, se espera que bar sea una expresión constante. Sin embargo, en este caso no existe una constante con el nombre bar. PHP asume ahora que usted quiso decir bar literalmente, como la cadena "bar", pero que olvidó escribir las comillas.

¿Entonces porqué está mal?

En algún momento en el futuro, el equipo de PHP puede querer usar otra constante o palabra clave, o puede que usted introduzca otra constante en su aplicación, y entonces se ve en problemas. Por ejemplo, en este momento no puede usar las palabras empty y default de esta forma, ya que son palabras clave reservadas especiales.
Nota: Reiterando, al interior de un valor string entre comillas dobles, es válido no rodear los índices de matriz con comillas, así que "$foo[bar]" es válido. Consulte los ejemplos anteriores para más detalles sobre el porqué, asi como la sección sobre procesamiento de variables en cadenas.

No response to “Funciones útiles”