Funciones array (I)

Número de elementos:

count()

Poner y quitar elementos:

Del final:
Quitar:
array_pop()
Poner:
array_push()

Del principio:
Quitar:
array_shift()
Poner:
array_unshift()

Ejemplos:

function muestraTabla($tabla) {
 echo "<pre>";
 print_r($tabla);
 echo "</pre>";
 }

 $tabla = array(1, 2, 3, 4, 5);
 $tabla = array("a" => 1,
 "b" => 2,
 "c" => 3,
 "d" => 4,
 "e" => 5,
 );
 muestraTabla($tabla);
 array_pop($tabla);
 muestraTabla($tabla);
 array_push($tabla, 99);
 muestraTabla($tabla);
 array_shift($tabla);
 muestraTabla($tabla);
 array_unshift($tabla, 200);
 muestraTabla($tabla);

Soluciones ejercicios

<?php

$a = [[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]];
echo sumaDiagonal($a);

//Ejercicio 1
function sumaArray($array) {
    $suma = 0;
    foreach ($array as $fila) {
        foreach ($fila as $valor) {
            $suma += $valor;
        }
    }
    return $suma;
}

//Ejercicio 2
function sumaColumna($array, $columna) {
    $suma = 0;
    for ($i = 0; $i < count($array); $i++) {
        $suma += $array[$i][$columna];
    }
    return $suma;
}

function sumaFila($array, $fila) {
    $suma = 0;
    for ($i = 0; $i < count($array[$fila]); $i++) {
        $suma += $array[$fila][$i];
    }
    return $suma;
}

function sumaDiagonal($array) {
    $suma = 0;
    for ($i = 0; $i < count($array); $i++) {
        $suma += $array[$i][$i];
    }
    return $suma;
}

Ejercicios array multidimensionales

1.- Crear una función sumaArray que nos devuelva la suma del array que le pasemos como parámetro. Ejemplo:

$a=[[1,2],[3,4]];
echo sumaArray($a); //Imprime 10

2.- Crear una función sumaColumna a la que le pasamos un array y una columna y nos devuelve la suma de esa columna. Ejemplo:

$a=[[1,2],[3,4]];
echo sumaColumna($a,0); //Imprime 4 (1+3)

3.- Crear una función sumaFila a la que le pasamos un array y una fila y nos devuelve la suma de esa fila. Ejemplo:

$a=[[1,2],[3,4]];
echo sumaFila($a,0); //Imprime 3 (1+2)

4.- Crear una función sumaDiagonal a la que le pasamos un array y nos devuelve la suma de la diagonal. Ejemplo:

$a=[[1,2,3],[4,5,6],[7,8,9]];
echo sumaDiagonal($a); //Imprime 15 (1+5+9)

Ejemplo array dinámico

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form>
            Introduzca número alumnos:
            <input type="text" name="numero">
            <input type="submit">
        </form>
        <?php
        $numero = filter_input(INPUT_GET, "numero");
        if (!empty($numero)) {
            ?>
            <form>
                Introduzca los nombres:
                <?php for ($i = 0; $i < $numero; $i++) { ?>
                    <p><input type="text" name="alumno[]"></p>
                <?php } ?>
                <input type="submit">
            </form>
            <?php
        }

        $alumnos = filter_input(INPUT_GET, "alumno", FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
        if (!empty($alumnos)) {
            foreach ($alumnos as $alumno) {
                echo "<p>$alumno</p>";
            }
        }
        ?>

    </body>
</html>

Ejemplo arrays inputs

<!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

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);