Buenas tardes. Aquí dejo una posible solución del ejercicio CU00836B del curso PHP desde cero.
EJERCICIO
Crea las siguientes funciones en PHP:
a) Una función (tipo procedimiento, no hay valor devuelto) denominada escribirTresNumeros que reciba tres números enteros como parámetros y proceda a escribir dichos números en tres líneas en un archivo denominado datosEjercicio.txt. Si el archivo no existe, debe crearlo.
<?php function escribirTresNumeros($a, $b, $c){ $fp = fopen("datosEjercicio.txt", "w"); fputs($fp, $a."\n".$b."\n".$c); fclose($fp); } escribirTresNumeros(2, 4, 6); ?>
b) Una función denominada obtenerSuma (tipo función, devolverá un valor numérico) que reciba una ruta de archivo como parámetro, lea los números existentes en cada línea del archivo, y devuelva la suma de todos esos números.
<?php function obtenerSuma(){ $fp = fopen("datosEjercicio.txt", "r"); $contador = 0; $resultado = 0; $valor = array(); while(!feof($fp)){ $linea = fgets($fp); $valor[$contador] = $linea; echo "La línea ".($contador+1)." vale = ".$valor[$contador]."<br>"; $resultado = $resultado + $valor[$contador]; $contador += 1; } fclose($fp); return $resultado; } echo "La suma de las tres líneas es: ".obtenerSuma();?>
c) Una función denominada obtenerArrNum (tipo función, devolverá un array de valores numéricos) que reciba una ruta de archivo como parámetro, lea los números existentes en cada línea del archivo, y devuelva un array cuyo índice 0 contendrá el número existente en la primera línea, cuyo índice 1 contendrá el número existente en la segunda línea y así sucesivamente.
<?php function obtenerArrNum($archivo){ $fp = fopen($archivo, "r"); $valor; $contador = 0; while(!feof($fp)){ $linea = fgets($fp); $valor[$contador] = $linea; $contador += 1; } fclose($fp); return $valor; } foreach (obtenerArrNum("datosEjercicio.txt") as $indice => $valor) { echo "El índice ".$indice." contiene: ".$valor."<br>"; }?>
d) Crea código php donde a través de la función escribirTresNumeros escribas en el fichero los números 2, 8, 14. Luego, mediante la función obtenerSuma muestra por pantalla el resultado de sumar los números existentes en el archivo. Finalmente, mediante la función obtenerArrNum obtén el array, recórrelo y muestra cada uno de los elementos del array.
<?php function escribirTresNumeros($a, $b, $c){ $fp = fopen("datosEjercicio.txt", "w"); fputs($fp, $a."\n".$b."\n".$c); fclose($fp); } escribirTresNumeros(2, 4, 6); function obtenerSuma(){ $fp = fopen("datosEjercicio.txt", "r"); $contador = 0; $resultado = 0; $valor = array(); while(!feof($fp)){ $linea = fgets($fp); $valor[$contador] = $linea; echo "La línea ".($contador+1)." vale = ".$valor[$contador]."<br>"; $resultado = $resultado + $valor[$contador]; $contador += 1; } fclose($fp); return $resultado; } echo "La suma de las tres líneas es: ".obtenerSuma()."<br>"; echo "<br><br><br>"; function obtenerArrNum($archivo){ $fp = fopen($archivo, "r"); $valor; $contador = 0; while(!feof($fp)){ $linea = fgets($fp); $valor[$contador] = $linea; $contador += 1; } fclose($fp); return $valor; } foreach (obtenerArrNum("datosEjercicio.txt") as $indice => $valor) { echo "El índice ".$indice." contiene: ".$valor."<br>"; }?>
Gracias.
Buenos días, Pedro.
Gracias por el tiempo dedicado y por corregirme el ejercicio. Y también gracias por decirme esos pequeños detalles, porque pueden parecer pequeños, pero es lo que dices tú, sólo así podré aprender más y perfeccionarme.
Sobre los bucles que me has propuesto, tienes toda la razón, no hace falta que utilice un array (nunca sé si es "una" array o "un" array, jejeje), puesto que la variable $linea cambia de valor en cada pasada del bucle.
Referente a pasarle un enlace como parámetro de la función obtenerSuma(), procedo a la oportuna corrección:
<?php function obtenerSuma($archivo){ $fp = fopen($archivo, "r"); $contador = 0; $resultado = 0; while(!feof($fp)){ $linea = fgets($fp); echo "La línea ".(++$contador)." vale = ".$linea."<br>"; $resultado = $resultado + $linea; } fclose($fp); return $resultado; } $archivo = "datosEjercicio.txt"; echo "La suma de las tres líneas es: ".obtenerSuma($archivo);?>
Gracias.