Usuario:ManuelRomero/ProgramacionWeb/INAEM2021/Arrays/ejercicios
De WikiEducator
< Usuario:ManuelRomero | ProgramacionWeb/INAEM2021/Arrays
Revisión a fecha de 22:48 8 mar 2022; ManuelRomero (Discusión | contribuciones)
|
|
Tip: Para recargar de forma periódica la página pasados unos segundos podemos usar el meta de html
<META HTTP-EQUIV=Refresh CONTENT="5; URL=vuestra_pagina.php">
"https://image.shutterstock.com/image-photo/young-woman-skateboarder-skateboarding-city-600w-664570948.jpg" "https://gratisography.com/wp-content/uploads/2019/05/shutterstock-its-not-stock-block-new.jpg" "https://www.cerotec.net/data/fotos/gratisography.jpg" "https://cdn.pixabay.com/photo/2019/09/29/20/34/athens-4514311__340.jpg" "https://cdn.pixabay.com/photo/2019/10/24/18/36/forest-4574893__340.jpg" "https://cdn.pixabay.com/photo/2015/09/26/13/25/halloween-959049__340.jpg" "https://cdn.pixabay.com/photo/2019/09/11/09/27/people-4468350__340.jpg" "https://cdn.pixabay.com/photo/2019/10/23/18/58/malai-4572548__340.jpg" "https://cdn.pixabay.com/photo/2019/06/25/05/19/waterfall-4297450__340.jpg" "https://cdn.pixabay.com/photo/2019/10/23/10/47/aesthetic-4571211__340.jpg" "https://cdn.pixabay.com/photo/2019/10/23/18/32/freudenberg-4572410__340.jpg"
Posible solución |
---|
<?php //Declaramos el array $imagenes = [ "https://image.shutterstock.com/image-photo/young-woman-skateboarder-skateboarding-city-600w-664570948.jpg", "https://gratisography.com/wp-content/uploads/2019/05/shutterstock-its-not-stock-block-new.jpg", "https://www.cerotec.net/data/fotos/gratisography.jpg", "https://cdn.pixabay.com/photo/2019/09/29/20/34/athens-4514311__340.jpg", "https://cdn.pixabay.com/photo/2019/10/24/18/36/forest-4574893__340.jpg", "https://cdn.pixabay.com/photo/2015/09/26/13/25/halloween-959049__340.jpg", "https://cdn.pixabay.com/photo/2019/09/11/09/27/people-4468350__340.jpg", "https://cdn.pixabay.com/photo/2019/10/23/18/58/malai-4572548__340.jpg", "https://cdn.pixabay.com/photo/2019/06/25/05/19/waterfall-4297450__340.jpg", "https://cdn.pixabay.com/photo/2019/10/23/10/47/aesthetic-4571211__340.jpg", "https://cdn.pixabay.com/photo/2019/10/23/18/32/freudenberg-4572410__340.jpg" ]; /*Primera opción de solución para obtener las tres posiciones*/ //Generar 3 posiciones aleatorias NO REPETIDAS $size = sizeof($imagenes)-1; $pos1 = rand (0,$size); //Generamos la segunda posición $pos2 = rand (0,$size); //Verificamos que no coincida con la primera while ($pos2==$pos1) $pos2 = rand (0,$size); //Generamos la tercera posición $pos3 = rand (0,$size); //Verificamos que no coincida con la primera ni con la segunda while (($pos3==$pos2)||( $pos3 == $pos1)) $pos3 = rand (0,$size); $posiciones =[ $pos1, $pos2, $pos3]; /*Segunda opción de solución para obtener las tres posiciones*/ /*En este caso usamos la estructura do{..}while(); en lugar de un wile Esta estructura a diferencia de la anterior, siempre va a ejecutar una vez el contenido de la estructura de control. */ //Generar 3 posiciones aleatorias NO REPETIDAS $size = sizeof($imagenes)-1; $pos1 = rand (0,$size); //Generamos la segunda posición do { $pos2 = rand(0, $size); }while ($pos2==$pos1); //Verificamos que no coincida con la primera //Generamos la tercera posición do { $pos3 = rand(0, $size); }while (($pos3==$pos2)||( $pos3 == $pos1)); //Verificamos que no coincida con la primera ni con la segunda $posiciones =[ $pos1, $pos2, $pos3]; /*Tercera opción Usamos la función array_rand Esta función me retorna posiciones aleatorias de un array, y me lo retorna en otro array */ $posiciones = array_rand($imagenes, 3); //Prueba a hacer un var_dump de $posiciones ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" <meta http-equiv="Refresh" content="3"> <title>Document</title> </head> <body> <h1>Imágenes</h1> <?php foreach ($posiciones as $posicion) { echo "<img width='300' src='$imagenes[$posicion]'>"; } ?> </body> </html> |
Tienda de verduras
Dada una tienda de verduras con los siguientes productos
$productos = [ 'lechuga' => ['unidades' => 200, 'precio' => 0.90], 'tomates' =>['unidades' => 2000, 'precio' => 2.15], 'cebollas' =>['unidades' => 3200, 'precio' => 0.49], 'fresas' =>['unidades' => 4800, 'precio' => 4.50], 'manzanas' =>['unidades' => 2500, 'precio' => 2.10], ];
ejemplo recorrer el array |
---|
<?php $tienda = ['lechuga' => ['unidades' => 200, 'precio' => 0.90], 'tomates' =>['unidades' => 2000, 'precio' => 2.15], 'cebollas' =>['unidades' => 3200, 'precio' => 0.49], 'fresas' =>['unidades' => 4800, 'precio' => 4.50], 'manzanas' =>['unidades' => 2500, 'precio' => 2.10] ]; foreach ( $tienda as $producto => $datos ) echo "<h1> $producto hay {$datos['unidades']} unidades {$datos['precio']} €</h1>"; ?>
|
- Realiza una aplicación con un formulario para poder comprar productos
- Tras la compra se visualizará la factura del producto siempre que haya unidades
- Se mostrará las unidades que quedan de cada producto
Posible solución |
---|
<?php $tienda = [ 'lechuga' => ['unidades' => 200, 'precio' => 0.90], 'tomates' => ['unidades' => 2000, 'precio' => 2.15], 'cebollas' => ['unidades' => 3200, 'precio' => 0.49], 'fresas' => ['unidades' => 4800, 'precio' => 4.50], 'manzanas' => ['unidades' => 2500, 'precio' => 2.10], ]; if (isset($_POST['submit'])) { //Leo la compra $compra = $_POST['compra']; //generar la factura //Para ello leemos cada producto comprado y voy actualizando $factura = ""; $total = 0; foreach ($compra as $producto => $unidades) { if ($unidades > 0) { //solo si he comprado, si no, no incluyo en la factura $precio = $tienda[$producto]['precio']; if ($unidades > $tienda[$producto]['unidades']) $unidades = $tienda[$producto]['unidades']; $subtotal = $precio * $unidades; //Para establecer plural en la palabra unidad o unidades $plural = $unidades > 1 ? "es" : ""; $factura .= "$unidades unidad$plural de $producto a $precio = $subtotal<br />"; $total = $total + $subtotal; } } $factura .= "Total = $total Euros"; //generar un informe con los productos que quedan //Lo podría hacer en el bucle anterior, es muy parecido $informe = ""; foreach ($compra as $producto => $unidades) { if ($unidades > 0) { //solo si he comprado, si no, no incluyo en la factura $unidades_iniciales = $tienda[$producto]['unidades']; if ($unidades > $unidades_iniciales) $unidades = $unidades_iniciales; $resto_unidades = $unidades_iniciales - $unidades; $informe .= "De $producto había $unidades_iniciales y quedan $resto_unidades unidades.<br />"; } } } ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <fieldset> <legend>Datos para comprar</legend> <form action="index.php" method="post"> <?php foreach ($tienda as $producto => $datos) { echo "<label for='$producto'>" . ucfirst($producto) . "</label> ({$datos['precio']})€  "; echo "<input type='text' name='compra[$producto]' id='$producto' /> <br />\n"; } ?> <input type="submit" value="Comprar" name="submit"> </form> <!--Visualizar la factuar --> </fieldset> <?php if (isset($factura)): ?> <h1>Factura </h1> <fieldset> <legend>Detalle de la factura</legend> <?= $factura ?> </fieldset> <fieldset> <legend>Informe de estado de la tienda</legend> <?= $informe ?> </fieldset> <?php endif ?> </body> </html> |
Contar accesos de usuarios identificados
- Vamos a realizar un recorrido de un array asociativo de varios niveles.
- Realizaremos un estudio del array y luego lo recorreremos
|
- Puedes ver este ejercico en esta url de donde está adaptado http://www.tecn.upf.es/~ocelma/cpom/practicas/ es el ejercicio 12
- Ficheros
Artista.pdf Este fichero es un css para el ejercicios
Contenido del ArrayAsociativo.php
Planteando la solución
Contenido del array
- Para ver el array una buena forma es cargarlo en un fichero php y hacer o bien un var_dump o bien un print_r
<?php require_once ("datos.php"); var_dump( $artistas ); ?>
- A partir de él podemos mostrar la siguiente imagen que describe el aray
- Observamos que en primera instancia tengo un array asociativo de 6 índices cuyos valores son
185711, 32841, 84062, 84430, 84221, 118504
- Cada posición tiene como valor un array asociativo de 4 posiciones cuyos índices tiene los valores
name decades link canciones
- La posición name directamente tiene un valor string que es el nombre del artista
- La posición decades tiene un valor string que es la década de ese cantante
- La posición link tiene un valor string que es un url a una página con información sobre el artista
- La posición canciones es un array indexado de tantas posicione como canciones tenga el artista
- Cada posición del array indexado canciones es un array asociativo con dos índices
title link
- La posición title es un string con el título de la canción
- La posición link es un string con un url donde se puede oir la canción (Actualmente ya no están alojadas en esa posición)