Curso PHP 5 || IV. Utilización de Arrays

Actividades III

1.   Sin utilizar PHP determina si son true o false:

100.00 – 100 False

“zero” True

“false” True

0 + “true” False

0.000 False

“0.0” True

strcmp(“false”, “False”) True
Quizá la única que haga falta explicar es strcmp.
Esta función detecta que False es mayor que false y devuelve un 1.
Más información en la página de php.net
http://php.net/manual/en/function.strcmp.php

2.   Sin ejecutarlo en el intérprete PHP averigua que imprime el programa:

<?php
$edad 
12;
$numerodepie 13;
if (
$edad $numerodepie)
{
   print 
"mensaje 1";
} elseif (
$numerodepie++) && ($edad 20) {
   print 
"mensaje 2";
}else {
   print 
"mensaje 3";
}

print 
"edad: $edad. Tama&#241;o de pie: $numerodepie";
?>


Imprime el mensaje 3: edad: 13. Tamaño de pie: 14

3.   Utiliza while() para imprimir una tabla de equivalencias de temperaturas de grados Farenhite y Celsius desde -50 grados F a 50 grados F en incrementos de 5 grados. Para convertir las F a C resta 32 a la temperatura, multiplícalo por 5 y divide entre 9


<?php
$far 
= -50;
print 
'<table>
      <tr><th>Farenheit</th><th>Celsius</th></tr>'
;
while (
$far <= 50) {
   
$celsius = ($far 32) * 9;
   print 
"<tr><td>$far</td><td>$celsius</td></tr>";
   
$far += 5;
}
print 
'</table>'
?>


4.   Modifica el ejercicio anterior para hacerlo con for()

<?php
print '<table>
      <tr><th>Farenheit</th><th>Celsius</th></tr>'
;
for (
$far = -50$far <= 50$far += 5) {
   
$celsius = ($far 32) * 9;
   print 
"<tr><td>$far</td><td>$celsius</td></tr>";
   
$far += 5;
}
print 
'</table>'
?>



VI.   Manejando Arrays

Cuando empezaba en esto de la programación, las arrays eran una palabra maldita que me traía dolores de cabeza al intentar comprenderlas. Con el tiempo leyendo un libro de PHP que explicaba bastante bien el tema de las arrays, les perdí todo el miedo que les tenia y entendí que no debemos ir con miedo porque los demás digan que es difícil, pues todo depende de cómo se explique.
Arrays se puede definir como un ‘contenedor’ de múltiples valores. Si bien hemos aprendido que una variable es un contenedor con nombre que contiene un valor, una array no es más que una variable que contiene múltiples valores.

Fundamentos básicos

Un array se compone de elementos. Cada elemento contiene una clave y un valor.


Ejemplo simple de un array


La clave (o index) es el valor que identifica el array y no puede repetirse en un mismo array, el valor es el dato importante del array y si puede repetirse.

Crear un array

Para crear un array usamos la función array(). Las arrays se declaran de la misma forma que una variable, a diferencia que las array llevan corchetes cuadrados al final de su nombre.


Hay varias formas de agregar un valor al array, vamos a ver un ejemplo de todas:

<?php
//                 clave        dato
$comida = array ('desayuno' => 'leche',
             
'comida' => 'hamburguesas',
             
'cena' => 'sopa');
//para acceder al array ponemos la clave entre corchetes:
echo $comida['desayuno']; #~ devolverá 'leche' como texto.

//array con claves numéricas
$juegos[0] = 'football';
$juegos[1] = 'basketball';
$juegos[2] = 'tennis';

//El método de acceso es el mismo pero usando claves numéricas
echo $juegos[2]; #~ devolverá 'tennis'

//Ejemplos de arrays validos:
$cosas['trs-22'] = 'una cosa';
$cosas[2600] = 'atari';
$cosas['Adam'] = 'patrocinador';

echo 
$cosas[2600]; #~ devolverá 'atari'
?>


En el caso de los arrays numéricos podemos agregar un valor al array aún sin saber cuál es el último index.

<?php
$juegos
[0] = 'football';
$juegos[1] = 'basketball';
$juegos[2] = 'tennis';
//imaginando que esta array se declaró en otro archivo y no logramos encontrarlo,
//podemos hacer lo siguiente:
$juegos[] = 'baseball';
?>


La declaración de un array con los corchetes rectos indica que el valor del index será el siguiente al último, en este caso 3.
Si queremos declarar un array con index numérico podemos hacerlo de la misma forma que el primer ejemplo pero sin declarar el index

<?php
$ciudades 
= array('madrid''barcelona''cádiz');
?>


En este caso los index son 0, 1, 2 y respectivamente.


Averiguar el tamaño de un array


Para conocer el tamaño de un array usaremos la función count().


<?php
$ciudades 
= array('madrid''barcelona''cádiz');
echo 
count($ciudades);
?>



Devuelve ‘3’.

Cuando se pasa un array vacio a una sentencia if() esta evalúa como 0.

Bucles con Arrays

Uno de los usos más comunes de un array es procesarlo elemento por elemento para, por ejemplo, agregarlo a una tabla.
Para ello utilizamos el último bucle que nos faltaba explicar en la sección III, el foreach:


<?php
$ciudades 
= array('madrid''barcelona''cádiz');
echo 
'<table>
     <tr><th>Ciudad</th></tr>'
;
foreach (
$ciudades as $ciudad) {
   echo 
'<tr><td>'.$ciudad.'</td></tr>';
}
?>



El foreach lo que hace es copiar el valor de $ciudades en el de $ciudad y lo procesa como una clave única, este proceso lo aplica por cada valor del array.
En lo personal e descubierto que con las consultas a una BD (con adodb) los bucles while o for “eliminan” el contenido de la consulta al procesarla eliminaba el contenido del array, con foreach al copiar la clave y no utilizar el original podemos procesarlo cuantas veces queramos.
Qué pasa si queremos tener un control tanto de la clave como del valor? Bueno para eso entonces usaremos el símbolo ‘=>’

<?php
$ciudades 
= array('madrid''barcelona''cádiz');
echo 
'<table>
     <tr><th>Clave</th><th>Valor</th></tr>'
;
foreach (
$ciudades as $clave => $valor) {
   echo 
'<tr><td>'.$clave.'</td><td>'.$valor.'</td></tr>';
}
?>


Cambiar valores del array con foreach

Ahora lo que queremos lograr es modificar el valor del array original. Para conseguirlo hemos de utilizar el nombre del array original y la variable $clave para acceder al dato correspondiente.


<?php
$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');

foreach (
$precios as $comida => $precio) {
   
// $precio = $precio * 2; no funciona
   
$precios[$comida] = $precio 2;
}
?>


Buscando en el array

Para buscar si una clave existe por medio de su clave podemos usar array_key_exists().



<?php

$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
            
'pan' => '0.5');

if (
array_key_exists('hamburguesa'$precios))
   echo 
$precios['hamburguesa']; 
#~ Nos da el precio de la hamburguesa: 12
?>


La sintaxis es: array_key_exists(‘nombre o valor clave’, ‘array’);

El resultado es True en caso de que exista o False en caso contrario.
Si lo que queremos es buscar por medio de su valor usamos in_array()

<?php
$precios 
= array('hamburguesa' => '12',
         
'batido' => '2',
        
'pan' => '0.5');

if (
in_array('12'$precios))
   echo 
$precios['hamburguesa']; #~ Nos da el precio de la hamburguesa: 12
?>


En este ejemplo buscamos a partir del valor y no de la clave, pero recordemos que el valor puede repetirse y por lo tanto podríamos tener varios resultados.
También podemos usar array_search() es igual que in_array pero devuelve la clave y no el valor.
En el ejemplo se puede notar lo que decía antes de múltiples resultados, en este caso solo mostrará la primera coincidencia y no ambas.

<?php
$precios 
= array('hamburguesa' => '12',
        
'batido' => '12',
        
'pan' => '0.5');

if (
array_search('12'$precios))
   echo 
array_search('12'$precios); #~ Salida: 'hamburguesa'
?>


Interpolando arrays en cadenas con comillas

De igual forma que se puede interpolar una variable, también se puede interpolar un array hay gente que usa comillas dobles para interpolar las arrays que contienen comillas simples. Pero esto no es posible cuando tenemos cadenas que cuentan con ambas comillas.
Otros quitan las comillas simples y usan $array[valor], lo cual es válido para todas las arrays excepto las que contienen espacios o signos de puntuación, por todo ello yo recomiendo este método que es igual de sencillo pero es universal (de todas formas en mis codes podéis ver que hago el primer caso cuando solo uso unas comillas)

<?php
$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');

#el valor de $precios['total'] es 14.5
$precios['total'] = $precios['hamburguesa'] + $precios['batido'] + $precios['pan'];

echo 
"EL precio total de lo comprado es: {$precios['total']}";
?>



Eliminar elementos al array

Ya conocemos como crear un nuevo elemento y como modificarlos pero aún no he explicado cómo eliminarlos.
Bueno el método usa la función unset(), que no es específicamente para arrays sino para cualquier variable.


<?php

$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');
//borrado el elemento hamburguesa del array
unset($precios['hamburguesa']);

?>


Ordenar arrays

Para ordenar los array utilizaremos la función sort(), esta función debería utilizarse solo con arrays de claves numéricas, ya que si las claves son alfabéticas las substituirá por numéricas al ordenarlas.

<?php

$precios 
= array('hamburguesa' => '12',
        
'batido' => '2',
        
'pan' => '0.5');

echo 
'antes:<br />';
foreach (
$precios as $clave => $valor) {
   echo 
$clave.' '.$valor.'<br />';   
}


sort($precios);
echo 
'después: <br />';
foreach (
$precios as $clave => $valor) {
   echo 
$clave.' '.$valor.'<br />';   
}
/*    Salida:
antes:
   hamburguesa 12
   batido 2
   pan 0.5
después:
   0 0.5
   1 2
   2 12
*/
?>



También podemos ordenar por su valor y no por su clave con la función asort(). Disponemos de otra función para ordenar llamada ksort que ordena por clave pero manteniendo el nombre de dicha clave y no la substituye por un valor numérico.
Estas tres funciones disponen de sus homologos que ordenan de forma descendente: rsort() arsort() y krsort()

Implode() y explode()

La función implode es el método más rápido y a la vez corto de mostrar todos los valores de un array su sintaxis es:
implode(‘delimitador de cada elemento’, ‘array’);


<?php

$precios 
= array('Cerdo asado''estofado de ternera''pavo soso');

echo 
implode(', ',$precios);
#~ La salida es: Cerdo asado, estofado de ternera, pavo soso
?>


Explode es exactamente lo contrario, es la forma más rápida de crear un array, su sintaxis es:
explode(‘delimitador de cada elemento’, ‘cadena a separar’);

<?php

$cadena 
'Ayer fui a un concierto';
$matriz explode(' '$cadena);

echo 
$matriz;
?>


En este caso nos indica que matriz es un array.

Arrays multidimensionales

Para finalizar y para que no se haga una lección muy pesada (que estamos en fiestas!!), procedo a explicar las arrays multidimensionales y con esto acabamos por hoy.
Las arrays multidimensionales no son otra cosa que un array dentro de otra array (estas serían bidimensionales, 2 dimensiones), cuantas más arrays dentro de otras más dimensiones contienen.


<?php
$comidas 
= array('desayuno' => array('leche''galletas');
   
'comida' => array('primer plato' => 'estofado''segundo plato' => 'ensalada''bebida' => 'cocacola');
          
'cena' => 'no cene, estoy a dieta xD';
    );
#Para acceder a un array multidimensional:
echo $comidas['desayuno'][0]; //Muestra: 'Leche'
echo $comidas['comida']['segundo plato']; //Muestra 'ensalada'


?>


Para acceder, agregar, borrar, modificar arrays multidimensionales es exactamente igual que con las de una dimensión.

Foreach con arrays multidimensionales.

Para acceder a todas las dimensiones hemos de anidar tantos bucles foreach como dimensiones tengamos.

<?php

$comidas 
= array('desayuno' => array('leche''galletas'),
             
'comida' => array('primer plato' => 'estofado''segundo plato' => 'ensalada''bebida' => 'cocacola'),
             
'cena' => 'no cene, estoy a dieta xD'
             
);

foreach (
$comidas as $clave => $comida) {
   foreach (
$comida as $key => $plato) {
      echo 
"$key -> $plato";
   }
}

?>


En este ejemplo no todas las claves contienen arrays, por lo que produce un warning, la forma de solucionarlo es con un if() y la función is_array().

Dicha función devuelve true si la variable es un array o false en caso contrario.
Sintaxis: is_array(‘variable’)

El code correcto sería:

<?php

$comidas 
= array('desayuno' => array('leche''galletas'),
             
'comida' => array('primer plato' => 'estofado''segundo plato' => 'ensalada''bebida' => 'cocacola'),
             
'cena' => 'no cene, estoy a dieta xD'
             
);

foreach (
$comidas as $clave => $comida) {
   if (
is_array($comida)) {
      foreach (
$comida as $key => $plato)
         echo 
"$key -> $plato";
   }else
      echo 
"$clave -> $comida";
      
}
?>


Y con esto hemos acabado el tostón de hoy! :D, si me he saltado alguna parte importante de las arrays hacédmelo saber vía MP ;)

Ejercicios IV

Hoy solo dejamos un ejercicio ^^
1.   Con  datos inventados crea array para los diferentes casos:
a)   La nota y el ID de cada estudiante según su grupo
b)   Cantidad de stock de cada producto en una tienda
c)   Nombres de las personas de tu familia
d)   Nombre edad y parentesco con las personas de tu familia

Felices fiestas :D




Versión .doc: IV. Juguemos con las Arrays
Versión .pdf: IV. Juguemos con las Arrays