Arrays

<?php 
	$day[0]="domingo";
	$day[1]="lunes";
	$day[2]="martes";
	$day[3]="miercoles";
	$day[4]="jueves";
	$day[5]="viernes";
	$day[6]="sabado";

	//La funcion date, en conjunto con el modificador "w", devuelve el numero de día que es hoy
	$dayNumber=date("w");

	echo "Hoy es ". $day[$dayNumber];
?>
<?php 
	$day = array("domingo", "lunes", "martes", "miercoles", "jueves", "viernes", "sabado");

	$dayNumber=date("w");

	echo "Hoy es ".$day[$dayNumber];
?>

Ejercicio

Dado el siguiente código:

$languages = array("HTML/CSS", "JavaScript", "PHP", "Python", "Ruby");
print_r($languages);

Modifica el item PHP del array y vuelve a usar print_r() para ver su contenido.

Eliminar un elemento de un array

<?php
	$array = array("red", "blue", "green");
	//El siguiente método borra el elemento “green”
	unset($array[2]);
?>

Ejercicio

Borrar Python del array y luego volver a ejecutar print_r() para comprobar que ya no se encuentra en el array.

<?php
	$languages = array("HTML/CSS","JavaScript", "PHP", "Python", "Ruby");
	print_r($languages);
?>

Convertir un array en texto y un texto en array

Array a texto:

$array = array("afsdf", "asdf", "asdf", "asdf");
$txt = join(", ", $array);

Texto a Array:

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza)

Arrays asociativos

<?php 
	$capital['DE'] = "Berlin";
	$capital['DK'] = "Copenhague";
	$capital['ES'] = "Madrid";

	echo $capital['ES'];
?>
<?php 
	$capital =array("DE"=>"Berlín", "DK" =>"Copenhage", "ES" =>"Madrid");

	echo $capital['ES'];
?>

Recorrer y contar elementos del array

<?php 

	$capital['JP'] = "Tokyo";
	$capital['DK'] = "Copenhague";
	$capital['ES'] = "Madrid";

	foreach($capital as $value){ 		//foreach($capital as $index=>$value){
		echo $value."<br/>";		
	}

	$elementosArray = count($capital);
	echo "El array tiene ". $elementosArray." elementos";

?>

Ejercicio

Crea un array con cinco nombres de persona y recórrelo mostrando el texto "Conozco a alguien llamado".

Ejercicio

Recorrer la siguiente lista con un bucle imprimiendo el doble de cada número:

$my_list = array(1,9,3,8,5,7);

Ejercicio

En estadística, la media aritmética de una colección de datos (muestra) se calcula:

formula

Es decir, sumando cada uno de los valores y dividiendo por la totalidad de valores existentes.

En las siguientes muestras:

Muestra 1: 5 5 5 5 5
Muestra 2: 1 1 5 9 9

Ambas tienen una media de 5 pero, en cambio, son dos muestras bastantes diferentes. Por este motivo es interesante observar la desviación respeto la media que tiene cada valor

Media 5
Muestra 1 5 5 5 5 5
Desviaciones M1 0 0 0 0 0
Muestra 2 1 1 5 9 9
Desviaciones M2 -4 -4 0 4 4

Con la media y las desviaciones ya tenemos una información más exacta de cómo es cada muestra, pero parece que no hemos ganado demasiado porque si la muestra tenía n valores ahora tenemos 1 media y n valores de desviaciones.

Si se quieren resumir las desviaciones de la muestra a un solo valor y hacemos la media de las desviaciones nos encontramos que las desviaciones negativas compensan las positivas y en la segunda muestra del ejemplo resulta que el cómputo (-4-4+0+4+4)/5 da cero igual que la media de la muestra 1 en que no había desviación.

La relevancia de la desviación es independiente de su signo, por ello, calculamos su cuadrado.

Mediana 5
Muestra 1 5 5 5 5 5
Desviaciones M1 0 0 0 0 0
Muestra 2 1 1 5 9 9
Desviaciones M2 16 16 0 16 16

Y si calculamos la media de los cuadrados, los resultados son bien diferentes. En el caso de la muestra 1 es cero y en el de la muestra 2 es 12.8. Este último cómputo que hemos hecho es la varianza de la muestra:

fórmula

La raíz cuadrada de esta varianza es lo que se denomina desviación típica de la muestra y que vendría a ser la media de las desviaciones tomadas en valor absoluto.

Tarea: Calcular la media, las desviaciones de la media, las desviaciones al cuadrado, la varianza y la desviación típica de un conjunto de números que se leerán desde un fichero cuyo nombre se pasará como parámetro.

El ejercicio consistirá en la creación de una serie de módulos en php que desarrollen, cada uno, un determinado trabajo según el detalle que se hará a continuación.

  • Módulo getData

    Este módulo no tiene que recibir ningún parámetro. El llamamiento en el programa tendrá que ser del tipo:

    index.php?filename=data10

    el fichero de datos consta de una única instrucción de php en que la variable $cadena recibe como valor una cadena de texto integrada por una serie de números que están separados por un espacio en blanco, como por ejemplo

    $cadena = "0 1 2 3 4 5 6 7 8 9";

    el fichero de datos consta de una única instrucción de php en que la variable $cadena recibe como valor una cadena de texto integrada por una serie de números que están separados por un espacio en blanco.

  • Módulo round2

    Recibe como parámetro un número y lo devuelve con un máximo de 2 decimales.

  • Módulo showNumbers
    Este módulo recibe como parámetro una array de números y una cadena de texto. En una primera hilera mostrará la cadena de texto a modo de título y en una segunda muestra los números separados por espacios. Por ejemplo, al llamamiento showNumbers($data, "Original data") si el array $data es | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |, mostrará
    ejercicio php
  • Módulo tableAverage
    Este módulo recibirá una mesa de números y devolverá su media.
  • Mòdul createDeviationTable
    Este módulo tiene que recibir un array de números y su media y creará un nuevo array, de la misma longitud y llenará sus posiciones con las desviaciones a la media correspondientes a los valores del array entrado.
    createDeviationTable($in, $average) devolvería el array $out.
    $in 1 1 5 9 9
    $out -4 -4 0 4 4
  • Módulo createVarianceTable
    Este módulo tiene que recibir un array de números y su media y creará una nueve array, de la misma longitud y llenará sus posiciones con el cuadrado de las desviaciones a la media correspondientes a los valores del array entrada. createVarianceTable($in, $media) devolvería la array $out.
    $in 1 1 5 9 9
    $out 16 16 0 16 16

Indicaciones preceptivas

  1. No se puede hacer uso de variables globales
  2. En PHP existe la function count($arg) que recibe como argumento un array y devuelve la cantidad de elementos que tiene el array $arg.
    Por ejemplo si la mesa es (89, 7, 3, 4, 5, 9) devolvería un 6.
  3. Queda especialmente prohibido hacer uso de las funciones de arrays de php salvo count.
  4. Se facilitan los 5 ficheros de datos, de data10 a data14

Ejercicio

Disponemos de una secuencia de números positivos cada uno de ellos separado del siguiente por un espacio y que finaliza con un cero

Tarea: Se pide un programa que sea capaz de leer un fichero que contenga una cadena de números y escriba en pantalla, a uno por línea, los números primos que forman parte de la secuencia, hasta que se encuentre un cero.

Indicaciones preceptivas

  • La llamada al programa será del tipo:
    index.php?filename=data30 por lo cual se tendrá que emplear la instrucción $filename=$_GET["filename"]; para cargar el nombre del fichero que incorpora la instrucción que asigna valor a la variable $cadena.
  • Los ficheros de datos constan de una única instrucción de php en que la variable $cadena recibe como valor una cadena de texto integrada por series de números enteros y positivos que están separados por un espacio y finaliza en un 0
    Por ejemplo el fichero data30 tiene el siguiente contenido
    <?php
     $cadena = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0";
    ?>
Descargar ficheros

Otras indicaciones

  • Un número primo es aquel diferente a 1 y que sólo es divisible por 1 y por sí mismo.
  • Puede resultar útil construir una función que permita saber si un número es primo o no.

Ejercicio

El tesorero de un partido político ha encontrado una manera de codificar las cuentas de la caja B a partir de códigos de colores en que cada color de una bola corresponde a una cifra de un número según la traducción

Codi ejercicio php - bola azul ejercicio php - bola roja ejercicio php - bola verde ejercicio php - bola amarilla ejercicio php - bola azul y verde ejercicio php - bola roja y verde ejercicio php - bola verde y amarilla ejercicio php - bola verde y azul ejercicio php - bola azul y amarilla ejercicio php - bola amarilla y roja
valor 0 1 2 3 4 5 6 7 8 9 Separador
Nombre fichero B R G Y BG RG GY GB BY YR E

La secuencia que crea está formada por los nombres de los ficheros que codifican los colores y es del tipo

{c11 c12 ... c1n E c21 c22 ... c2n E c31 c32 ... c3n E ... E cm1 cm2 ... cmn .} on

  • cij : nombre del fichero de color correspondiente a la cifra j de la cantidad y.
  • E es el carácter que indica que se ha acabado las cifras de un número
  • . es el carácter '.' que indica el fin de la secuencia imagen de como debería quedar el ejercicio de las bolas de PHP
  • Esta imagen muestra la codificación de colores y los valores asociados a la secuencia {R G BY Y B B B @E YR RG B B @E RG RG RG RG .} hemos marcado los separadores con color azul para #ver que la secuencia contiene tres números

Tarea: Crear un programa que reciba un fichero con la secuencia correspondiente a una serie de cantidades y muestre en pantalla, a una línea por cantidad:

  • la codificación en bolas de colores
  • la palabra Value y el valor de la cantidad codificada

Al acabar de mostrar las cantidades, en la línea siguiente, se mostrará el total. Optativamente, se puede mostrar debajo, el código de color correspondiente al total.
Por ejemplo:

ejemplo de como quedaría el ejercicio de las bolas con PHP resuelto

Indicaciones preceptivas

  • El llamamiento en el programa será del tipo:
    index.php?filename=data50
  • Las instrucciones para cargar el fichero de datos y crear la lista $data a partir de la variable $cadena ya forman parte del programa principal de la plantilla .
  • Con los ficheros del enunciado, se facilitan 10 ficheros de imagen que corresponden a cada cifra y que también se usan al ejercicio 4.
  • B.png R.png G.png Y.png BG.png RG.png GY.png GB.png BY.png YR.png
  • Se tiene que crear la function putImg que, a partir del nombre del código mostrará una celda de color a la pantalla.
  • Se tiene que crear la function colorToValue que recibe un texto correspondiente al al código de una cifra y devuelve la cifra que le corresponde según el array mostrado al principio. Por ejemplo, si recibe "BY" devolvería un 8.
  • No se pueden emplear variables globales.

Consejos

Este problema se tiene que considerar como un problema de trabajo con una secuencia (que nombraremos externa) en que cada elemento es también una secuencia (interna).

Partiendo del ejemplo {R G BY Y B B B E YR RG B B E RG RG RG RG .}, la secuencia externa tiene tres elementos que están limitados por la letra 'E' o bien '.'. Así los elementos de la secuencia externa son:

  • R G BY Y B B B
  • YR RG B B
  • RG RG RG RG

Cada uno de ellos es una secuencia interna

El tratamiento de esta secuencia de secuencias se hace directamente a partir del uso de array_shift sobre la lista $data y los elementos que podemos obtener pueden ser:

  • El '.' implica el fin de una secuencia interna (un número) y de la secuencia externa (acabamos la secuencia de números).
  • La 'E' que indica el fin de un número
  • Cualquier otro código, corresponderá a una bola

Así, para tratar la secuencia de secuencias, tendremos que trabajar con dos bucles, uno de grande (externo) que contendrá uno más pequeño (interno).

El bucle grande, evidentemente, se tendrá que ejecutar hasta que no se coja de la secuencia lo '.', que indica el final de la secuencia total.

El bucle interno se tendrá que ejecutar hasta que se encuentre una 'E' o un '.' que indica el final de una secuencia interna (un número).

  • Tenéis que tener en cuenta, que cuando se lee una 'E', para poder entrar al bucle interno, tendréis que recoger otro elemento de la lista.
  • Para calcular un número cuando recibimos las cifras por orden desde la de más valor a la de menos valor el mecanismo iterativo no es complejo, a pesar de que no es directo.
    Por ejemplo: recibimos las cifras 4, 8, 2 y queremos obtener el 482.
    • numero := 0
    • numero := numero * 10 + 4 → 0 * 10 + 4 → 0 + 4 → 4
    • numero := numero * 10 + 8 → 4 * 10 + 8 → 40 + 8 → 48
    • numero := numero * 10 +2 → 48 * 10 + 2 → 480 + 2 → 482
icono de mandar un mail¡Contacta conmigo!
Pablo Monteserín
contacta conmigoPablo Monteserín

¡Hola! ¿En qué puedo ayudarte?