<?php function extrae($cadena, $inicio, $fin) { $pos = strpos($cadena, $inicio); if ($pos === false) { return ""; } $pos2 = strpos($cadena, $fin, $pos + strlen($inicio)); if ($pos2 === false) { return ""; } return substr($cadena, $pos + strlen($inicio), $pos2 - $pos - strlen($inicio)); } function extraeRegexp($cadena, $inicio, $fin) { preg_match_all('#' . $inicio . '(.*?)' . $fin . '#', $cadena, $matches); return $matches[1]; } //Lee archivo y lo mete en un string $datos = file_get_contents("https://www.guiadelocio.com/teatro-y-danza"); $pos = strpos($datos, "item-listado-AB"); $items = []; while ($pos !== false) { $pos2 = strpos($datos, "</div>", $pos); $items[] = substr($datos, $pos, $pos2 - $pos); $pos = strpos($datos, "item-listado-AB", $pos + 1); } $fichero = fopen("teatro.csv", "a"); foreach ($items as $item) { $titulo = strip_tags(extraeRegexp($item, 'alt="', '"')[0]); echo $titulo . "<br/>"; $resto = strip_tags(extraeRegexp($item, '<p class="ubicacion">', '</p>')[0]); echo $resto . "<br/>"; $resto = explode(",", $resto); print_r($resto); fwrite($fichero, utf8_decode(date("d-m-Y") . ";" . $titulo . ";" . $resto[0] . ";" . $resto[1] . "\n")); } fclose($fichero); //echo($datos); ?>
Categoría: PHP
Funciones de ficheros
http://php.net/manual/en/ref.filesystem.php
https://www.w3schools.com/php/php_ref_filesystem.asp
<?php $fichero=fopen("datos.txt","a"); fwrite($fichero,"Lo que quiero que se escriba en el fichero\n"); fwrite($fichero,"otra cosa"); fclose($fichero); $fichero=fopen("tabla.txt","a"); for($i=1;$i<=10;$i++){ fwrite($fichero,$i." x 5 = ".($i*5)."\n"); } fclose($fichero); $fichero=fopen("datos.txt","r"); while(!feof($fichero)){ $linea=fgets($fichero); echo $linea."<br/>"; } fclose($fichero); ?>
Ejercicio equipos
Index:
<h1>Página super guay</h1> Hola, dinos tu nombre para saber como dirigirnos hacia ti: <form action="panel.php"> <input type="text" name="nombre"> <input type="submit"> </form>
Panel:
<?php session_start(); require_once 'librerias.php'; $nombre = filter_input(INPUT_GET, 'nombre', FILTER_SANITIZE_STRING); if (empty($nombre) && !isset($_SESSION['nombre'])) { ?> <h2>No has introducido ningún nombre. Por favor vuelve atrás.</h2> <a href="index.php">Vuelve atrás y pon un nombre ¡hombre!</a> <?php } else { if (!empty($nombre)) { $_SESSION['nombre'] = $nombre; } else { $nombre = $_SESSION['nombre']; } ?> <h1>Hola <?= $nombre ?>, bienvenido a la página superguay</h1> <a href="equipos.php">Introducir equipos</a><br/> <a href="resultados.php">Introducir resultados</a> <?php if (isset($_SESSION['equipos'])) { ?> <a href="resultados.php">Introducir resultados</a> <?php pintaEquipos($_SESSION['equipos']); } if (isset($_SESSION['equipos']) && isset($_SESSION['resultados'])) {?> <a href="resultados.txt">Descargar resultados</a> <?php muestraResultados($_SESSION['equipos'], $_SESSION['resultados']); } } ?>
equipos:
<h1>Introduzca los equipos separados por comas</h1> <form action="guardar_equipos.php"> <input type="text" name="equipos" size="100"> <input type="submit"> </form>
guardar_equipos:
<?php session_start(); require_once 'librerias.php'; // Recuperar los equipos que nos han mandado $equipos = filter_input(INPUT_GET, "equipos"); // Si está vacío poner un aviso y enlace a equipos.php if (empty($equipos)) { ?> <h1>No has mandado equipos, inténtalo de nuevo</h1> <a href="equipos.php">Volver a equipos</a> <?php } else { //Si no está vacío convertir la lista de equipos en un array $tabla = explode(",", $equipos); //guardarlo en la variable de sesión equipos $_SESSION['equipos'] = $tabla; // Y mostrarlo como una tabla HTML pintaEquipos($tabla); } ?> <a href="panel.php">Volver al panel</a>
resultados:
<?php session_start(); require_once 'librerias.php'; if(isset($_SESSION['equipos'])){ pintaResultados($_SESSION['equipos']); } else{ ?> <h1>No hay equipos definidos, vuelva atrás</h1> <a href="panel.php">Volver atrás</a> <?php } ?>
guardar_resultados:
<?php session_start(); require_once 'librerias.php'; // Recuperar los resultados que nos han mandado $resultados = filter_input(INPUT_POST, 'resultado',FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); // Si está vacío poner un aviso y enlace a equipos.php if (empty($resultados)) { ?> <h1>No has mandado resultados, inténtalo de nuevo</h1> <a href="resultados.php">Volver a resultados</a> <?php } else { //guardarlo en la variable de sesión resultados $_SESSION['resultados'] = $resultados; // Y mostrarlo como una tabla HTML muestraResultados($_SESSION['equipos'],$_SESSION['resultados']); guardaResultados($_SESSION['equipos'],$_SESSION['resultados']); } ?> <a href="panel.php">Volver al panel</a>
librerias:
<?php function pintaEquipos($tabla) { ?> <table> <tr><td>Equipos</td></tr> <?php foreach ($tabla as $valor) { ?> <tr><td><?= ucfirst($valor) ?></td></tr> <?php } ?> </table> <?php } function pintaResultados($tabla) { ?> <form action="guardar_resultados.php" method="post"> <table> <tr><td>Resultados</td></tr> <?php for ($i = 0; $i < count($tabla); $i += 2) { ?> <tr><!--<td><?php echo $tabla[$i]; if (isset($tabla[$i + 1])) { echo " - " . $tabla[$i + 1]; } ?></td>--> <td><?= $tabla[$i] . (isset($tabla[$i + 1]) ? " - " . $tabla[$i + 1] : "") ?></td> <td><input type="text" name="resultado[]"></td> </tr> <?php } ?> </table> <input type="submit"> </form> <?php } function muestraResultados($equipos,$resultados) { ?> <table> <tr><td>Resultados</td></tr> <?php for ($i = 0; $i < count($equipos); $i += 2) { ?> <tr> <td><?= $equipos[$i] . (isset($equipos[$i + 1]) ? " - " . $equipos[$i + 1] : "") ?></td> <td><?=$resultados[$i/2]?></td> </tr> <?php } ?> </table> <?php } function guardaResultados($equipos, $resultados, $archivo = "resultados.txt",$tipo="w") { $fichero = fopen($archivo, $tipo); fwrite($fichero, "Resultados\n"); for ($i = 0; $i < count($equipos); $i += 2) { fwrite($fichero, $equipos[$i] . (isset($equipos[$i + 1]) ? " - " . $equipos[$i + 1] : "")); fwrite($fichero, " : ".$resultados[$i / 2] . "\n"); } fclose($fichero); }
Recorrer arrays en php
Para recorrer un array normal podemos usar tanto un for normal como un foreach:
$t=[3,7,23,4]; for($i=0;$i<count($t);$i++){ echo $t[$i]."-"; } echo "<br/>"; foreach($t as $valor){ echo $valor."-"; }
Para recorrer un array asociativo sólo podemos usar un foreach:
$a=["q"=>1,"w"=>2,"e"=>3]; foreach($a as $valor){ echo $valor."-"; }
Ejemplos arrays en php
Mostrar una tabla con print_r y
para el formato:function muestraTabla($tabla) { echo "<pre>"; print_r($tabla); echo "</pre>"; }Mostrar una tabla bidimensional en formato tabla de HTML:
function creaTabla($tabla) { ?><table><?php foreach ($tabla as $fila) { ?><tr><?php foreach ($fila as $valor) { ?><td><?= $valor ?></td><?php } ?> </tr><?php } ?> </table><?php }Función que nos devuelve el elemento más frecuente de una tabla:
function frecuente($tabla) { $t = array_count_values($tabla); arsort($t); $res = []; $max = array_values($t)[0]; foreach ($t as $clave => $valor) { if ($valor == $max) { $res[] = $clave; } } return $res; }Diagonales:
/* * Nos devuelve un array bidimensional del tamaño que le indiquemos * Relleno de ceros menos la diagonal principal que valdrá 1 * Ejemplo: diagonal(3) * 1 0 0 * 0 1 0 * 0 0 1 */ creaTabla(diagonal2(20)); function diagonal($tam) { $res = []; for ($i = 0; $i < $tam; $i++) { $res[$i] = array_fill(0, $tam, 0); $res[$i][$i] = 1; } return $res; } function diagonal2($tam) { $res = []; for ($i = 0; $i < $tam; $i++) { for ($j = 0; $j < $tam; $j++) { if ($i == $j) { $res[$i][$j] = 1; } else { $res[$i][$j] = 0; } } } return $res; }
Ejemplos funciones con arrays
function calcetin($tabla) { $res = []; foreach ($tabla as $clave => $valor) { $res[$valor] = $clave; } return $res; } $t = ["a" => 1, "b" => 3, "c" => 1]; muestraTabla($t); $c = calcetin($t); muestraTabla($c); function contar($tabla, $valor) { $cont = 0; foreach ($tabla as $v) { if ($valor == $v) { $cont++; } } return $cont; } echo esUnico1($t); function esUnico1($tabla) { foreach ($tabla as $valor) { if (contar($tabla, $valor) > 1) { return false; } } return true; } function esUnico2($tabla) { $t = array_count_values($tabla); foreach ($t as $valor) { if ($valor > 1) { return false; } } return true; } function esUnico3($tabla){ sort($tabla); for($i=1;$i<count($tabla);$i++){ if ($tabla[$i]==$tabla[$i-1]){ return false; } } return true; } function esUnico4($tabla){ return count($tabla)==count(array_unique($tabla)); }
Ejemplo de función levenheist
echo masParecida("tomato", ["naranja","tomate","platano","morcilla"]); echo masParecida("marnaja", ["naranja","tomate","platano","morcilla"]); function masParecida($entrada, $palabras) { // no se ha encontrado la distancia más corta, aun $distancia = -1; $cercana = ""; // bucle a través de las palabras para encontrar la más cercana foreach ($palabras as $palabra) { // calcula la distancia entre la palabra de entrada y la palabra actual $lev = levenshtein($entrada, $palabra); // verifica por una coincidencia exacta if ($lev == 0) { // la palabra más cercana es esta (coincidencia exacta) return $palabra; } // si esta distancia es menor que la siguiente distancia // más corta o si una siguiente palabra más corta aun no se ha encontrado if ($lev <= $distancia || $distancia < 0) { $cercana = $palabra; $distancia = $lev; } } return $cercana; }
Funciones de cadena en PHP
Buscar una subcadena dentro de otra. Ejemplo ‘¿Tiene una cadena la @?’:
if (strpos($_POST['email'], '@') === false) { print 'No hay arroba (@)'; }
Ponemos ‘===’ porque si la arroba está en la posición 0 se entiende como false.
El siguiente código nos devuelve el número de apariciones de una cadena en otra:
function contarCadena($pajar, $aguja) { $pos = strpos($pajar, $aguja); $cont = 0; while ($pos !== false) { $cont++; $pos = strpos($pajar, $aguja, $pos + 1); } return $cont; }
Obtener subcadenas de una cadena. Ejemplo: ‘Obtener los cuatro primeros caracteres del código’.
$substring = substr($string,$start,$length); $codigo='ABCD123456'; $parte=substr($codigo,0,4); //$parte='ABCD' $parte=substr($codigo,4,4); //$parte='1234' $parte=substr($codigo,4); //$parte='123456' $parte=substr($codigo,-4); //$parte='3456'
Ejercicio: dada una cadena obtener otra con los dos primeros caracteres y los dos últimos.
Mayúsculas y minúsculas:
print ucfirst("how do you do today?"); //Primera letra print ucwords("the prince of wales"); //primera letra de cada palabra print strtoupper("i'm not yelling!"); //mayúsculas print strtolower('<a href="one.php">one</a>'); // minúsculas
Partir cadenas con explode (por separador):
$cadena="hola que tal"; $palabras=explode($cadena); //Array ( [0] => hola [1] => que [2] => tal ) echo implode("-",$palabras);//hola-que-tal
Reemplazar una cadena por otra:
echo str_replace("a", "#", "hola que tal"); //hol# que t#l
Repetir una cadena:
echo str_repeat("|-|",6); //|-||-||-||-||-||-|
Funciones ajedrez y tabla
function ajedrez($tam) { ?> <table > <?php for ($i = 0; $i < $tam; $i++) { ?><tr><?php for ($j = 0; $j < $tam; $j++) { ?><td class="<?= ($i + $j) % 2 == 0 ? "" : "dark" ?>"></td><?php } ?></tr><?php } ?> </table><?php } function tabla($tabla) { ?><table> <?php for ($i = 1; $i <= 10; $i++) { ?> <tr><td><?= $i ?></td><td>x</td><td><?= $tabla ?></td> <td>=</td><td><?= ($i * $tabla) ?></td></tr> <?php } ?> </table><?php }
Ejemplos PHP
Árbol de un lado:
$cadena = "*"; for ($i = 1; $i < 10; $i++) { echo $cadena . "<br/>"; $cadena = $cadena . "*"; }
Árbol de los dos lados:
$tam=8; $cadena = ""; echo "<pre>"; for ($i = 0; $i < $tam; $i++) { for ($j = 0; $j < $tam - $i; $j++) { echo " "; } echo $cadena . "*" . $cadena . "<br/>"; $cadena .= "*"; } echo "</pre>";
Árbol con bolas de navidad:
$tam=8; $cadena = ""; echo "<pre>"; for ($i = 0; $i < $tam; $i++) { for ($j = 0; $j < $tam - $i; $j++) { echo " "; } for ($j = 0; $j < $i * 2 + 1; $j++) { if (rand(1, 10) == 7) { echo "@"; } else { echo "*"; } } echo "<br/>"; } echo "</pre>";
Tablero de ajedrez, css:
td{ width:50px; height:50px; background-color: linen; border: 1px solid #BBBBBB; } .dark{ background-color: black; }
php:
<h1>Tablero de ajedrez</h1> <?php $tam = 8; ?> <table > <?php for ($i = 0; $i < $tam; $i++) { ?><tr><?php for ($j = 0; $j < $tam; $j++) { ?><td class="<?=($i+$j)%2==0?"":"dark"?>"></td><?php } ?></tr><?php } ?> </table>