Archivo

Posts Tagged ‘array’

Eliminar «,» final en PHP

Básicamente lo que digo es usar esto:

$cadena = trim($cadena, ‘,’);

¿Cuál es el problema?

Imagina, estás consultando una base de datos, extrayendo un número indeterminado de elementos y generando un array para Javascript como el siguiente:

[«Rojo», «Azul», «Amarillo», «Verde», «Morado», «Naranja»]

Lo normal sería hacer algo así:

    while ($fila = $resultado->fetch_row()){
      $cadena=$cadena.$fila[$columna].»,»;
    }

Lógicamente te va a salir una cadena como:

[«Rojo», «Azul», «Amarillo», «Verde», «Morado», «Naranja»,]

Y eso te va a dar un error.

Podrías hacer muchas cosas para quitarle esa coma (o incluso no ponérsela nunca), pero con el uso de trim se queda muy fino y bonito.

Categorías: Desarrollo web Etiquetas: , , , ,

Arrays multidimensionales

20 de octubre de 2012 Deja un comentario

Hay muchas maneras de crear o acceder arrays multidimensionales.

En nuestro curso, cuando vayamos a acceder al resultado de una consulta, sólo nos va a interesar los arrays bidimensionales.

Hay que pensar en un array que tiene x elementos (x es el número de registros devueltos por la consulta, piensa en «select * from persona»). Cada uno de esos elementos, en sí, es un array, puesto que será:

DNI: 22999888

NOMBRE: Pedro

APELLIDO1: Guirado

CIUDAD: Maracena

Así que el resultado de la consulta tendríamos que recorrerlo con dos bucles, uno recorrería cada registro y otro, dentro del anterior, recorrería cada campo de ese registro.

Ejemplo:

<html>
<head>
   <title>Listado de la agenda de mis amigos</title>
</head>
<body>
<?php
// Datos iniciales de la agenda personal
$agenda = array(array('Nombre'    => 'Santiago',
                      'Direccion' => 'Ctra. Valencia Km.7',
                      'Telefono'  => 994541145,
                      'email'     => 'santiago@correo.mio'),
                array('Nombre'    => 'Agustín',
                      'Direccion' => 'Ctra. Valencia Km.7',
                      'Telefono'  => 994541145,
                      'email'     => 'agustin@correo.mio'),
                array('Nombre'    => 'Javier',
                      'Direccion' => 'Ctra. Valencia Km.7',
                      'Telefono'  => 993344114,
                      'email'     => 'javier@correo.mio'));

// Se escribe la cabecera de la tabla
echo "<table border='3' align='center'>\n";

// Se escriben los datos de las cabeceras de las columnas
echo "<tr bgcolor='orange'>\n";
$datos = array_keys($agenda[0]);
foreach ($datos as $indice)
   echo "<th>", $indice, "</th>\n";
echo "</tr>\n";

// Se recorren los elementos de la matriz $agenda
for ($i = 0; $i < count($agenda); $i++)
   {
   echo "<tr>\n";
   // Se recorre los datos de una persona que están en $agenda[$i]
   foreach ($agenda[$i] as $valor)
      echo "<td>", $valor, "</td>\n";
   echo "</tr>\n";
   }
echo "</table>\n";
?>
</body>
</html>

..

Buscar elementos en una matriz

20 de octubre de 2012 Deja un comentario

Gracias a la función in_array() podemos buscar un elemento en una matriz.

Recibe dos parámetros, el valor buscado y la matriz. El tercer parámetro es opcional, si se le pone true hará búsquedas estrictas, en lo referente a tipos de datos.

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

Devuelve true si lo ha encontrado y false si no lo ha encontrado.

Otra función interesante es array_search(). Nos devuelve el índice asociado a un valor. Recibe dos parámetros: el valor buscado y la matriz. El tercer parámetro, como en el caso anterior, hace una búsqueda de tipos estricta. Si no encuentra el valor, devolverá false.

mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )

Con la función array_key_exists() podremos saber si el índice que se le pasa commo argumento pertenece a la matriz.

bool array_key_exists ( mixed $key , array $search )

Eliminar un elemento de una matriz

20 de octubre de 2012 Deja un comentario

Para eliminar un elemento de una matriz utilizaremos:

unset($matriz[‘indice’]);

Categorías: Desarrollo web Etiquetas: , , ,

Recorrido recuperando todos los índices y valores de una matriz

20 de octubre de 2012 Deja un comentario

Otra opción es recuperar todos los índices y todos los valores en matrices secuenciales y procesar las mismas.

Tenemos dos funciones:

  • array_values($matriz): devuelve una matriz que contiene todos los valores de $matriz indexados desde el 0 en adelante.
  • array_keys($matriz): devuelve todos los índices de la matriz depositándolos en una matriz escalar indexada desde 0 en adelante.

Ejemplo:

<html>
<head>
  <title>Recorrido de matrices</title>
</head>
<body>
<?php
$matriz = array ("Primavera", "Verano", "Otoño", "Invierno");
$indices = array_keys($matriz);
$valores = array_values($matriz);
echo "<table border='1' align='center'>\n";
echo "<tr bgcolor='orange'>\n",
     "<th>Índice</th>\n",
     "<th>Valor</th>\n",
     "</tr>\n";
// generamos las filas con un bucle for    que recorre los elementos de $indices    
for ($i = 0; $i < count($indices); $i++)
   echo "<tr align='center'>\n",
        "<td>", $indices[$i], "</td>\n",
        "<td>", $valores[$i], "</td>\n",
        "<tr>\n";
echo "</table>\n";
?>
</body>
</html>

Recorrido manejando el cursor interno de una matriz (2)

20 de octubre de 2012 Deja un comentario

Otra función que maneja el cursor interno de una matriz es each($matriz).

Devuelve el elemento actual (índice/valor) y avanza el cursor hasta el siguiente elemento. Devuelve false cuando se han procesado todos los elementos.

El resultado de esta función es una matriz que contiene 4 posiciones:

[0] – El índice del elemento

[1] – El valor del elemento

[‘key’] – El índice del elemento

[‘value’] – El valor del elemento

Gracias a esto, podemos recuperar la clave del elemento actual con 0 o key y el valor con 1 o value.

Ejemplo:

<html>
<head>
  <title>Recorrido de matrices</title>
</head>
<body>
<?php
$matriz = array ("Primavera", "Verano", "Otoño", "Invierno");
echo "<table border='1' align='center'>\n";
echo "<tr bgcolor='orange'>\n",
     "<th>Índice</th>\n",
     "<th>Valor</th>\n",
     "</tr>\n";
// generamos las filas con un bucle while junto con each() y list()        
while ($elemento = each($matriz))
   echo "<tr align='center'>\n",
        "<td>", $elemento[0], "</td>\n",
        "<td>", $elemento[1], "</td>\n",
        "<tr>\n";  
echo "</table>\n";
?>
</body>
</html>

Categorías: Desarrollo web Etiquetas: , , , ,

Recorrido de una matriz manejando el cursor interno de la misma

20 de octubre de 2012 Deja un comentario

El cursor o puntero interno de la matriz nos permite recorrerla. Además, PHP proporciona una serie de funciones relacionadas con la manipulación de dicho cursor:

reset($matriz): Sitúa el cursor en el primer elemento de la misma y devuelve el valor de dicho elemento. Si la matriz está vacía, devuelve el valor false.

next($matriz): Avanza el cursor hasta el siguiente elemento y devuelve el valor de dicho elemento. Si la matriz está vacía o no hay más elementos, devuelve false.

prev($matriz): Retrocede el cursor interno de la matriz hasta el elemento anterior de la misma y devuelve el valor de dicho elemento. Si la matriz está vacía o no hay más elementos, devuelve false.

end($matriz): Avanza el cursor hasta el último elemento y devuelve el valor del mismo. Si está vacía, devuelve false.

key($matriz): Devuelve el índice del elemento situado en la posición actual del cursor. Si la matriz está vacía, devuelve NULL.

current($matriz): Devuelve el valor del elemento situado en la posición actual del cursor. Si está vacía, devuelve false.

pos($matriz): Igual que current.

Ejemplo:

<html>
<head>
  <title>Recorrido de matrices</title>
</head>
<body>
<?php
$matriz = array ("Primavera", "Verano", "Otoño", "Invierno");
echo "<table border='1' align='center'>\n";
echo "<tr bgcolor='orange'>\n",
     "<th>Índice</th>\n",
     "<th>Valor</th>\n",
     "</tr>\n";
// generamos las filas con un bucle do .. while        
do {
   $indice = key($matriz);
   $valor = current($matriz);
   echo "<tr align='center'>\n",
        "<td>", $indice, "</td>\n",
        "<td>", $valor, "</td>\n",
        "<tr>\n";         
}  while (next($matriz));
echo "</table>\n";
?>
</body>
</html>

Categorías: Desarrollo web Etiquetas: , , , , , , , , , ,

Recorrido de un array con foreach

20 de octubre de 2012 Deja un comentario

PHP 4 (PHP3 no) incluye una construcción foreach, tal como perl y algunos otros lenguajes. Esto simplemente da un modo fácil de iterar sobre matrices. foreach funciona solamente con matrices y devolverá un error si se intenta utilizar con otro tipo de datos ó variables no inicializadas. Hay dos sintaxis; la segunda es una extensión menor, pero útil de la primera:

foreach(expresion_array as $value) sentencia
foreach(expresion_array as $key => $value) sentencia

La primera forma recorre el array dado por expresion_array. En cada iteración, el valor del elemento actual se asigna a $value y el puntero interno del array se avanza en una unidad (así en el siguiente paso, se estará mirando el elemento siguiente).

La segunda manera hace lo mismo, salvo que la clave del elemento actual será asignada a la variable $key en cada iteración.

Nota: Cuando foreach comienza su primera ejecución, el puntero interno a la matriz se reinicia automáticamente al primer elemento de la matriz. Esto significa que no se necesita llamar a reset() antes de un bucle foreach.

Nota: Hay que tener en cuenta queforeach trabaja con una copia de la matriz especificada y no la lista en si, por ello el puntero de la lista no es modificado como en la función each(), y los cambios en el elemento de la matriz retornado no afectan a la matriz original. De todas maneras el puntero interno a la matriz original avanza al procesar la matriz. suponiendo que bucle foreach se ejecuta hasta el final, el puntero interno a la matriz estar/aacute; al final de la matriz.

Ejemplo:

<html>
<head>
  <title>Recorrido de matrices</title>
</head>
<body>
<?php
$matriz = array ("Primavera", "Verano", "Otoño", "Invierno");
echo "<table border='1' align='center'>\n";
echo "<tr bgcolor='orange'>\n",
     "<th>Índice</th>\n",
     "<th>Valor</th>\n",
     "</tr>\n";
// generamos las filas con un bucle foreach        
foreach ($matriz as $indice => $valor)
   echo "<tr align='center'>\n",
        "<td>", $indice, "</td>\n",
        "<td>", $valor, "</td>\n",
        "<tr>\n";  
echo "</table>\n";
?>
</body>
</html>

Lo que hace la construcción foreach es manejar un cursor interno que va accediendo a cada uno de los elementos de la matriz según el orden en que se hayan definido (se recorre la lista que define la matriz).

Cuando se desea modificar los valores contenidos en la matriz, es necesario que la variable donde la construcción foreach va depositando dichos valores esté definida como una referencia (con el operador & de prefijo). De esta manera, el código:

$matriz=array(10,20,30,40);
foreach ($matriz as &$unvalor)
   $unvalor=$unvalor+$unvalor*0.01;

provoca que se incremente el valor de todos los elementos de la matriz en un 1 por ciento.

 

Categorías: Desarrollo web Etiquetas: , , , ,

Función Count

14 de octubre de 2012 Deja un comentario

Cuenta los elementos de una matriz o propiedades de un objeto.

Descripción

int count( mixed var [, int mode] )

Devuelve el número de elementos en var, que típicamente es un array, porque cualquier otra cosa diferente de un objeto tendría sólo un elemento.

count() puede regresar 0 para una variable que no ha sido inicializada, pero también regresa 0 para una variable que ha sido inicializada con una matriz vacía.

 

Categorías: Desarrollo web Etiquetas: , , ,

Arrays en PHP

4 de octubre de 2012 Deja un comentario

Un array en PHP es realmente un mapa ordenado. Un mapa es un tipo de datos que asocia valores con claves. Este tipo es optimizado para varios usos diferentes; puede ser usado como una matriz real, una lista (vector), una tabla asociativa (una implementación de un mapa), diccionario, colección, pila, cola, y posiblemente más. Ya que los valores de un array pueden ser otros arrays, árboles y también son posibles arrays multidimensionales.

Sintaxis

Especificación con array()

Un array puede ser creado usando el constructor del lenguaje array(). Éste toma un cierto número de parejas clave => valor como argumentos.

    array(
    clave  => valor,
    clave2 => valor2,
    clave3 => valor3,
    ...
    )

La coma después del elemento del array es opcional y se puede omitir. Esto normalmente se hace para arrays de una sola línea, esto es, es preferible array(1, 2) que array(1, 2, ). Por otra parte, para arrays multilínea, la coma final se usa comnúnmente, ya que permite la adición sencilla de nuevos elementos al final.

A partir de PHP 5.4 también se puede usar la sintaxis de array corta, que 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.

Los arrays 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);
?> 

La clave es opcional. Si no se especifica, PHP usará el incremento de la clave integer más grande utilizada anteriormente.

Ejemplo #4 Arrays indexados sin clave

<?php
$array = array("foo", "bar", "hallo", "world");
var_dump($array);
?>

El resultado del ejemplo sería:

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hallo"
  [3]=>
  string(5) "world"
}

Es posible especificar la clave sólo para algunos de los elementos y dejar por fuera 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 el último valor «d» se le asignó la clave 7. Esto es debido a que la mayor clave integer 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 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:

Si intenta acceder a una clave del array que no se ha definido es lo mismo que el acceso 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 sintaxis de corchete

Un array existente puede ser modificado al definir valores explícitamente en éste.

Esto se realiza mediante la asignación de valores al array, especificando la clave en corchetes. La clave también se puede omitir, resultando en un par de corchetes vacíos ([]).

    $arr[clave] = valor;
    $arr[] = valor;
    // clave puede ser un integer o string
    // valor puede ser cualquier valor de cualquier tipo

Si $arr aún no existe, se creará, así que esto es también una forma alternativa de crear un array. Sin embargo, esta práctica es desaconsejada ya que si $arr ya contiene algún valor (p.ej. un string de una variable de petición), entonces este valor 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 con su clave. Para quitar un par clave/valor, se debe llamar la función unset() en éste.

 <?php
$arr = array(5 => 1, 12 => 2);

$arr[] = 56;    // Esto es lo mismo que $arr[13] = 56;
                // en este punto de el script

$arr["x"] = 42; // Esto agrega un nuevo elemento a
                // el array con la clave "x"

unset($arr[5]); // Esto elimina el elemento del array

unset($arr);    // Esto elimina el array completo
?> 

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).

Nota:

La función unset() permite remover 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().

 <?php
$a = array(1 => 'uno', 2 => 'dos', 3 => 'tres');
unset($a[2]);
/* producirá un array que se ha definido 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 arrays. Ésta provee una manera fácil de recorrer un array.

Ejemplo:

 <?php
$colors = array('rojo', 'azul', 'verde', 'amarillo');

foreach ($colors as $color) {
    echo "¿Le gusta el $color?\n";
}

?> 

Comparación

Es posible comparar arrays con la función array_diff() y mediante operadores de arrays.

Los Arrays son ordenados. El orden puede ser modificado usando varias funciones de ordenado. Vea la sección sobre funciones de arrays para más información. La función count() puede ser usada para contar el número de elementos en un array.

Dado que el valor de un array puede ser cualquier cosa, también puede ser otro array. De esta forma es posible crear arrays recursivas y multi-dimensionales.

Ejemplo #14 Arrays recursivos y multi-dimensionales

 <?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 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"

// Crear una nueva array multi-dimensional
$juices["apple"]["green"] = "good";
?> 

……