Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/INAEM2021/Arrays/ejercicios»
De WikiEducator
(→Tienda de verduras) |
(→Tienda de verduras) |
||
Línea 251: | Línea 251: | ||
?> | ?> | ||
</source> | </source> | ||
− | |||
Línea 258: | Línea 257: | ||
*Tras la compra se visualizará la factura del producto siempre que haya unidades | *Tras la compra se visualizará la factura del producto siempre que haya unidades | ||
*Se mostrará las unidades que quedan de cada producto | *Se mostrará las unidades que quedan de cada producto | ||
+ | {{plegable|hide|Posible solución| | ||
+ | <source lang=php> | ||
+ | |||
+ | |||
+ | <?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> | ||
+ | </source> | ||
+ | }} | ||
===Contar accesos de usuarios identificados=== | ===Contar accesos de usuarios identificados=== |
Revisión de 22:48 8 mar 2022
|
|
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)