<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
$valor = filter_input(INPUT_GET, "valor", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
print_r($valor);
?>
<form>
<?php
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
?>
<input type="text" size="3" name="valor[<?= $i ?>][<?= $j ?>]">
<?php
}
echo "<br>";
}
?><input type="submit">
</form>
</body>
</html>
Arrays asociativos
<?php
$m=[[1,2,3],
[4,5,6,7,8],
[7,8,9]];
print_r($m);
echo $m[1][1]; //Imprime 5 (fila 1, columna 1)
echo $m[1][3]; //Imprime 7 (fila 1, columna 3)
echo "<hr>";
//recorrer array
foreach($m as $c1=>$fila){
foreach($fila as $c2=>$v){
echo "($c1,$c2) $v ";
}
echo "<br>";
}
echo "<hr>";
$ma=[["nombre"=>"Ana","mail"=>"p@p.com","ciudad"=>"BCN"],
["nombre"=>"Eva","mail"=>"e@p.com","ciudad"=>"BCN"],
["nombre"=>"Rosa","mail"=>"r@p.com","ciudad"=>"BCN"],
];
print_r($ma);
echo $ma[1]['mail']; //El mail de Eva (fila 1, columna 'mail'
echo "<hr>";
//recorrer array
foreach($ma as $c1=>$fila){
foreach($fila as $c2=>$v){
echo "($c1,$c2) $v ";
}
echo "<br>";
}
echo "<hr>";
$aa=["gerencia"=>["nombre"=>"Ana","mail"=>"p@p.com","ciudad"=>"BCN"],
"administracion"=>["nombre"=>"Eva","mail"=>"e@p.com","ciudad"=>"BCN"],
"fábrica"=>["nombre"=>"Rosa","mail"=>"r@p.com","ciudad"=>"BCN"],
];
print_r($aa);
echo $aa['administracion']['mail']; //El mail de Eva (fila 'administracion', columna 'mail'
echo "<hr>";
//recorrer array
foreach($aa as $c1=>$fila){
foreach($fila as $c2=>$v){
echo "($c1,$c2) $v ";
}
echo "<br>";
}
echo "<hr>";
$a = [];
$n = 4;
$cont = 1;
for ($i = 0; $i < $n; $i++) {
for ($j = 0; $j < $n; $j++) {
$a[$i][$j] = $cont;
$cont++;
}
}
print_r($a);
echo $a[2][1]; //¿Qué imprime esto?
$usuarios = [["Nombre" => "Eva", "Aficiones" => ["Musica", "Cine"]],
["Nombre" => "Ana", "Aficiones" => ["Baile", "Cine"]],
["Nombre" => "Rosa", "Aficiones" =>
["Deportivas" => ["Fútbol", "Tenis"],
"Culturales" => ["Música", "Teatro"]]],
];
echo $usuarios[1]["Aficiones"][0]; //Baile
echo $usuarios[2]["Aficiones"]["Culturales"][0]; //Música
Juego de las monedas
https://culturacientifica.com/2013/06/21/el-juego-de-penney-tirando-monedas-con-curioso-resultado/
session_start();
$reset = filter_input(INPUT_GET, 'reset');
if (empty($_SESSION['jugador']) || !empty($reset)) {
$_SESSION['jugador'] = 0;
}
if (empty($_SESSION['maquina']) || !empty($reset)) {
$_SESSION['maquina'] = 0;
}
$jugada = filter_input(INPUT_GET, 'jugada');
if (!empty($jugada)) {
$maquina = ['CCC' => 'XCC', 'CCX' => 'XCC', 'CXC' => 'CCX', 'CXX' => 'CCX',
'XCC' => 'XXC', 'XCX' => 'XXC', 'XXC' => 'CXX', 'XXX' => 'CXX'];
$mijugada = $maquina[$jugada];
function tirada() {
return mt_rand(0, 1) == 1 ? 'C' : 'X';
}
$tiradas = tirada() . tirada() . tirada();
while (substr($tiradas, -3) != $jugada && substr($tiradas, -3) != $mijugada) {
$tiradas .= tirada();
}
if (substr($tiradas, -3) == $jugada) {
$_SESSION['jugador'] ++;
$texto = "Has ganado ¡Has hecho trampa, seguro!";
} else {
$_SESSION['maquina'] ++;
$texto = "Te he ganado, soy el mejor";
}
}
?><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>El juego de las monedas. Vas a perder.</h1>
<h2>Jugador:<?= $_SESSION['jugador'] ?> Máquina:<?= $_SESSION['maquina'] ?> </h2>
<form>
<p>Elige tu jugada</p>
<select name="jugada">
<option>CCC</option>
<option>CCX</option>
<option>CXC</option>
<option>CXX</option>
<option>XCC</option>
<option>XCX</option>
<option>XXC</option>
<option>XXX</option>
</select>
<input type="submit"> <input type="submit" name="reset" value="Reiniciar">
</form>
<?php
if (isset($jugada)) {
?>
<h2>Tu jugada: <?= $jugada ?> Mi jugada: <?= $mijugada ?></h2>
<?php
?>
<h3><?= substr($tiradas, 0, -3) ?><mark><?= substr($tiradas, -3) ?></mark></h3>
<?php
?>
<h2><?= $texto ?></h2>
<?php
}
?>
</body>
</html>
Y más ejercicios!!
1.- Con la función tirarMonedas que ya tenemos hecha, realizar una función llamada sucesionMonedas($cantidad) a la que le pasemos una cantidad y nos devuelva un array con tantas tiradas de monedas como la cantidad que le pasemos. Ejemplo:
sucesionMonedas(4)->[‘cara’,’cara’,’cruz’,’cara’]
2.- Realizar una función verMonedas($array) a la que le pasemos un array de tiradas (como el que devuelve el ejercicio anterior) y nos devuelva ‘caras’ si hay más caras que cruces y ‘cruces’ en el caso contrario. Si hay la misma cantidad devuelve ‘iguales’. Ejemplo:
$t=[‘cara’,’cara’,’cruz’,’cara’];
verMonedas($t) – >’caras’
$t=[‘cara’,’cruz’,’cruz’,’cara’];
verMonedas($t) – >’iguales’
$t=[‘cruz’,’cruz’,’cruz’,’cara’];
verMonedas($t) – >’cruces’
3.- Realizar una función triplesMonedas($array,$tipo) que pasándole un array del mismo tipo que el anterior y un string con ‘cara’ o ‘cruz’ nos devuelva true si hay tres caras o tres cruces seguidas. Ejemplo:
$t=[‘cara’,’cara’,’cruz’,’cara’];
triplesMonedas($t,’cara’)->false
$t=[‘cruz’,’cara’,’cara’,’cara’];
triplesMonedas($t,’cara’)->true
4.- Vamos a meternos en web y vamos a realizar un juego. Hay dos jugadores, A y B. Cada uno de ellos elije una combinación de tres tiradas. Por ejemplo, ‘cara’,’cara’,’cruz’ o ‘cruz’,’cruz’,’cruz’. Una vez elegidos le dan a enviar. El programa comenzará a tirar monedas hasta que salga la jugada de uno de los jugadores. En ese momento se detiene y dice que jugador ha ganado. Si eligen el ejemplo tendríamos:
‘cruz’,’cara’,’cruz’,’cara’,’cara’,’cara’,’cruz’ (Y en este momento nos detenemos porque ha salido la jugada del jugador A)
Ejercicios
1.- Crear una función que tire un dado el número de veces que le pasemos y nos devuelva el número de veces que ha salido el número que le indiquemos. Ej veces(100,3)->tirará un dado 100 veces y nos devolverá las veces que ha salido el 3
2.- Crear una función como la de tirarDado pero que en vez de tirar un dado nos tire dos y nos devuelva la suma: tirar2Dados()-> devuelve la suma.
3.- Crear una función tirarMoneda que nos devuelva cara o cruz aleatoriamente.
4.- Crear una función que tire una moneda el número de veces que le pasemos y que diga el número de caras que han aparecido. contarCaras(veces)
5.- La misma función que la anterior pero que devuelva un array con el número de caras en la primera posición (0) y el número de cruces en la segunda (1)
6.- Crear una función a la que le pasemos un array de números y nos devuelva cuantos son pares. pares(array).
7.- La misma función que la 1 pero que nos devuelva un array con el número de veces que ha aparecido cada número.
Funciones matemáticas
- abs — Valor absoluto
- base_convert — Convertir un número entre bases arbitrarias
- ceil — Redondear fracciones hacia arriba
- floor — Redondear fracciones hacia abajo
- round — Redondea un float
- intdiv — División entera
- max — Encontrar el valor más alto
- min — Encontrar el valor más bajo
- rand — Genera un número entero aleatorio
- mt_rand — Genera un mejor número entero aleatorio
- pi — Obtener valor de pi
$a=10; $b=5; //Los dos imprimen lo mismo echo abs($a-$b); echo "<hr>"; echo abs($b-$a); echo "<hr>"; //Nos devuelve 100, que es 256 en hexadecimal echo base_convert(256, 10, 16); echo "<hr>"; echo ceil(4.3)."<br>"; // 5 echo ceil(9.999)."<br>"; // 10 echo ceil(-3.14)."<br>"; // -3 echo "<hr>"; echo floor(4.3)."<br>"; // 4 echo floor(9.999)."<br>"; // 9 echo floor(-3.14)."<br>"; // -4 echo "<hr>"; echo round(3.4)."<br>"; // 3 echo round(3.5)."<br>"; // 4 echo round(3.6)."<br>"; // 4 echo round(3.6, 0)."<br>"; // 4 echo round(1.95583, 2)."<br>"; // 1.96 echo round(1241757, -3)."<br>"; // 1242000 echo round(5.045, 2)."<br>"; // 5.05 echo round(5.055, 2)."<br>"; // 5.06 echo "<hr>"; echo intdiv(3, 2); echo "<hr>"; echo max(2, 3, 1, 6, 7); // 7 echo "<hr>"; echo min(2, 3, 1, 6, 7); // 1 echo "<hr>"; echo rand(5, 15); echo "<hr>" echo mt_rand(5, 15);
Ejercicios fechas
1.- Crear una función esViernes que nos devuelva true si hoy es viernes y false en caso contrario.
2.- Crear una función vencimiento que pasándole un número de días nos devuelva la fecha de vencimiento, que es el día de hoy más ese número de días
3.- Crear una función festivos que pasándole un mes y un año nos devuelva el número de sábados y domingos que tiene.
4.- Crear una función laborables que pasandole un día, un mes y un año nos devuelva una cadena con los 15 días laborables siguientes (días entre lunes y viernes)
5.- Crear una función nextLeap que nos diga cual es el próximo año bisiesto. Si es el actual, el actual.
Funciones de fecha y hora
Obtener la fecha actual:
print date('d-M-Y');
//Otros formatos:
$hoy = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$hoy = date("m.d.y"); // 03.10.01
$hoy = date("j, n, Y"); // 10, 3, 2001
$hoy = date("Ymd"); // 20010310
$hoy = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$hoy = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$hoy = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001
$hoy = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month
$hoy = date("H:i:s"); // 17:16:18
$hoy = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (el formato DATETIME de MySQL)
Crear una fecha:
mktime (hora,minuto,segundo,mes,dia,año)
$mañana = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$mes_anterior = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$año_siguiente = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
Convertir cadenas en fecha:
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
Ejemplos funciones cadena
$a=2500.5;
echo $a;
echo "<hr>";
echo number_format($a,2,",",".");
echo "<hr>";
setlocale(LC_MONETARY, 'es_ES');
//echo money_format('%.2n', $a) . "\n";
//echo money_format('%.2n', $a);
$a="El \\título es
\"El Quijote\"";
echo nl2br($a);
$ciudad="L'hospitalet";
echo "<hr>";
$a="El <b>PHP</b> mola <i>mogollón</i>";
echo $a;
echo "<hr>";
echo htmlentities($a);
echo "<hr>";
echo strip_tags($a);
echo "<hr>";
$formato = "Hay %b monos en el %s, %x";
echo sprintf($formato, 14, 'árbol',100);
$password="Juan Pablo Fuentes";
echo "<hr>";
echo md5($password);
$password="cacahuete";
echo "<hr>";
echo md5($password);
$cadena="hola";
for($i=0;$i<10;$i++){
echo $cadena.$i."<br>";
echo md5($cadena.$i)."<br>";
}
echo "<hr>";
echo levenshtein("hola que tal", "ola que tal");
echo "<hr>";
echo levenshtein("cacahuete", "ola que tal");
Ejercicios cadenas
1.- Una función que devuelva true si la cadena que le pasamos empieza y acaba con la misma letra, independientemente de mayúsculas y minúsculas. Ejemplo iniciofin(«hola»)->false iniciofin(«alubia»)->true iniciofin(«Alava»)->true;
2.- Una función que nos ponga una cadena en minúsculas y la primera y última letra en mayúsculas. Ejemplo: flupper(«HOLA»)->»HolA» flupper(«cacahauete»)->»CacahuetE»
3.- Una función que nos quite los dos primeros caracteres de una cadena. recortar(«En un lugar de la mancha»)->» un lugar de la mancha»
4.- Una función que nos devuelva el centro de una cadena. El centro es, si la longitud de la cadena es impar, la letra que está en el medio. Si la longitud de la cadena es par, las dos letras del medio. centro(«mar»)->»a» centro(«casa»)->»as»;
5.- Rehacer la función contarVocales usando substr_count
6.- Crear una función repetirPad que le pasemos una cadena, una longitud y nos devuelva una cadena repetida tantas veces como haga falta para alcanzar longitud (pero sin pasarse) y después, si todavía falta para llegar a longitud, lo rellene con ‘#’. Veamos ejemplos:
repetirPad(«hola»,10)->»holahola##»
repetirPad(«adios»,18)->»adiosadiosadios###»