Ejercicios (sin formularios) - Matrices (3) Funciones - Soluciones

En esta página se muestran una parte de las soluciones de los ejercicios Matrices (3), concretamente el fragmento PHP, sin el principio ni el final de la página que se pueden dejar en fragmentos HTML.

Si lo prefiere, puede descargar unas posibles soluciones completas de estos ejercicios.

Matrices (3) 1 - Dados de póker

A continuación se muestran cuatro soluciones. En las dos primeras, los valores de los dados a mostrar se generan al mostrarlos. En las dos últimas, los valores de los dados se guardan en una matriz y posteriormente se muestran los dados.

  1. En esta solución, el valor del dado que se va a mostrar no es la cara del dado ("N", "R", "J", etc.), sino el índice de la matriz $dadosPoker.
    <?php
    // Guardamos los nombres de las imágenes en la matriz $dadosPoker
    $dadosPoker = ["N", "R", "J", "Q", "K", "A"];
    
    // Generamos el número de dados que vamos a mostrar
    $n = rand(3, 7);
    
    print "  <h2>Tirada de $n dados</h2>\n";
    print "\n";
    print "  <p>\n";
    for ($i = 0; $i < $n; $i++) {
        // Generamos el valor de un dado
        // Cuidado: se trata de un índice, no del valor
        $dado = array_rand($dadosPoker);
        // Mostramos la imagen del dado
        print "    <img src=\"img/dados-poker/$dadosPoker[$dado].svg\" alt=\"$dadosPoker[$dado]\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    
  2. En esta solución, el valor del dado que se va a mostrar es la cara del dado ("N", "R", "J", etc.).
    <?php
    // Guardamos los nombres de las imágenes en la matriz $dadosPoker
    $dadosPoker = ["N", "R", "J", "Q", "K", "A"];
    
    // Generamos el número de dados que vamos a mostrar
    $n = rand(3, 7);
    
    print "  <h2>Tirada de $n dados</h2>\n";
    print "\n";
    print "  <p>\n";
    for ($i = 0; $i < $n; $i++) {
        // Generamos el valor de un dado
        // Cuidado: se trata de un índice, no del valor
        $dado = $dadosPoker[array_rand($dadosPoker)];
        // Mostramos la imagen del dado
        print "    <img src=\"img/dados-poker/$dado.svg\" alt=\"$dado\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    
  3. En esta solución, los valores de los dados que se guardan no son las caras de los dados (N, R, J, etc.), sino los índices de la matriz $dadosPoker.
    <?php
    // Guardamos los nombres de las imágenes en la matriz $dadosPoker
    $dadosPoker = ["N", "R", "J", "Q", "K", "A"];
    
    // Guardamos los valores de los dados en la matriz $dados
    // Cuidado: se guardan los índices, no los valores
    $n = rand(3, 7);
    for ($i = 0; $i < $n; $i++) {
        $dados[] = array_rand($dadosPoker);
    }
    
    // Mostramos las imágenes de los dados obtenidos
    print "  <h2>Tirada de $n dados</h2>\n";
    print "\n";
    print "  <p>\n";
    foreach ($dados as $dado) {
        print "    <img src=\"img/dados-poker/$dadosPoker[$dado].svg\" alt=\"$dadosPoker[$dado]\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    
  4. En esta solución, los valores de los dados que se guardan son las caras de los dados (N, R, J, etc.).
    <?php
    // Guardamos los nombres de las imágenes en la matriz $dadosPoker
    $dadosPoker = ["N", "R", "J", "Q", "K", "A"];
    
    // Guardamos los valores de los dados en la matriz $dados
    $n = rand(3, 7);
    for ($i = 0; $i < $n; $i++) {
        $dados[] = $dadosPoker[array_rand($dadosPoker)];
    }
    
    // Mostramos las imágenes de los dados obtenidos
    print "  <h2>Tirada de $n dados</h2>\n";
    print "\n";
    print "  <p>\n";
    foreach ($dados as $dado) {
        print "    <img src=\"img/dados-poker/$dado.svg\" alt=\"$dado\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    

Matrices (3) 2 - Dados de póker (con texto en atributo alt)

A continuación se muestran tres soluciones. En las tres se guardan los valores de los dados en una matriz y posteriormente se muestran los dados. La diferencia entre ellas es la estructura de la matriz o matrices que guardan los nombres de los ficheros SVG ("N", "R", "J", etc.) y los textos que describen las caras ("Negros", "Rojos", "Jota", etc.).

  1. En esta solución, los nombres de los ficheros ("N", "R", "J", etc.) y los textos que describen las caras ("Negros", "Rojos", "Jota", etc.) se guardan en dos matrices distintas. Los valores de los dados que se van a mostrar, que se guardan en otra matriz, no son las caras de los dados (N, R, J, etc.), sino los índices de la matriz $dadosPoker.

    Un detalle importante de esta solución es que puesto que los nombres de los ficheros y los textos que describen las caras se guardan en dos matrices distintas, es crucial que el orden en las dos matrices sea el mismo, para que un único índice nos permita acceder a los dos valores relacionados.

    <?php
    // Guardamos los nombres de las imágenes en la matriz $dadosPoker
    $dadosPoker   = ["N", "R", "J", "Q", "K", "A"];
    $nombresPoker = ["Negros", "Rojos", "Jota", "Reina", "Rey", "As"];
    
    // Guardamos los valores de los dados en la matriz $dados
    // Cuidado: se guardan los índices, no los valores
    $n = rand(3, 7);
    for ($i = 0; $i < $n; $i++) {
        $dados[] = array_rand($dadosPoker);
    }
    
    // Mostramos las imágenes y los atributos alt de los dados obtenidos
    print "  <h2>Tirada de $n dados</h2>\n";
    print "\n";
    print "  <p>\n";
    foreach ($dados as $dado) {
        print "    <img src=\"img/dados-poker/$dadosPoker[$dado].svg\" alt=\"$nombresPoker[$dado]\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    
  2. En esta solución, la matriz que contiene los nombres de los ficheros y los textos que describen las caras tiene dos dimensiones.
    <?php
    // Guardamos los nombres de las imágenes en la matriz $dadosPoker
    $dadosPoker = [["N", "Negros"], ["R", "Rojos"], ["J", "Jota"], ["Q", "Reina"], ["K", "Rey"], ["A", "As"]];
    
    // Guardamos los valores de los dados en la matriz $dados
    // Cuidado: se guardan los índices, no los valores
    $n = rand(3, 7);
    for ($i = 0; $i < $n; $i++) {
        $dados[] = array_rand($dadosPoker);
    }
    
    // Mostramos las imágenes y los atributos alt de los dados obtenidos
    print "  <h2>Tirada de $n dados</h2>\n";
    print "\n";
    print "  <p>\n";
    foreach ($dados as $dado) {
        print "    <img src=\"img/dados-poker/{$dadosPoker[$dado][0]}.svg\" alt=\"{$dadosPoker[$dado][1]}\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    
  3. En esta solución, la matriz $dadosPoker tiene una dimensión, pero los índices de esta matriz son los valores de las caras de los dados (N, R, J, etc.) y los valores son las descripciones de las caras.
    <?php
    // Guardamos los nombres de las imágenes en la matriz $dadosPoker
    $dadosPoker = ["N" => "Negros", "R" => "Rojos", "J" => "Jota", "Q" => "Reina", "K" => "Rey", "A" => "As"];
    
    // Guardamos los valores de los dados en la matriz $dados
    $n = rand(3, 7);
    for ($i = 0; $i < $n; $i++) {
        $dados[] = array_rand($dadosPoker);
    }
    
    // Mostramos las imágenes y los atributos alt de los dados obtenidos
    print "  <h2>Tirada de $n dados</h2>\n";
    print "\n";
    print "  <p>\n";
    foreach ($dados as $dado) {
        print "    <img src=\"img/dados-poker/$dado.svg\" alt=\"$dadosPoker[$dado]\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    

Matrices (3) 3 - Cartas de cuatro palos

  1. En esta solución, no se guardan los valores en una matriz, sino que se generan en el momento de mostrar la carta. El valor del palo que se genera es un índice de la matriz de dos dimensiones $palos. Como tanto el número como el palo aparecen en dos lugares de la página (en el nombre del fichero a mostrar y en el atributo alt), guardamos estos valores en dos variables auxiliares. La matriz $palos tiene dos dimensiones: el primer elemento de cada elemento de la matriz $palos ([0]) es la inicial del palo y el segundo ([1]) es el nombre del palo.
    <?php
    // Guardamos los nombres de los cuatro palos
    $palos = [["c", "corazones"], ["d", "diamantes"], ["p", "picas"], ["t", "tréboles"]];
    
    // No guardamos los valores de las cartas
    // Los generaremos cuando mostremos las cartas
    $n = rand(5, 10);
    
    // Mostramos las imágenes de las cartas obtenidas
    print "  <h2>Extracción de $n cartas</h2>\n";
    print "\n";
    print "  <p>\n";
    for ($i = 0; $i < $n; $i++) {
        $palo   = array_rand($palos);
        $numero = rand(1, 10);
        print "    <img src=\"img/cartas/{$palos[$palo][0]}$numero.svg\" alt=\"$numero de {$palos[$palo][1]}\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    
  2. En esta solución, se guardan los valores en una matriz $cartas de dos dimensiones (aunque no sea necesario). En cada elemento de la matriz $cartas, el primer elemento de cada elemento de la matriz ([0]) es la inicial del palo y el segundo ([1]) es el número de la carta.
    <?php
    // Guardamos los nombres de los cuatro palos
    $palos = ["c" => "corazones", "d"=> "diamantes", "p" => "picas", "t" => "tréboles"];
    
    // Guardamos los valores de las cartas en la matriz $cartas
    // La matriz tiene dos dimensiones
    $n = rand(5, 10);
    for ($i = 0; $i < $n; $i++) {
        $cartas[] = [array_rand($palos), rand(1, 10)];
    }
    
    // Mostramos las imágenes de las cartas obtenidas
    print "  <h2>Extracción de $n cartas</h2>\n";
    print "\n";
    print "  <p>\n";
    foreach ($cartas as $carta) {
        print "    <img src=\"img/cartas/$carta[0]$carta[1].svg\" alt=\"$carta[1] de {$palos[$carta[0]]}\" width=\"100\">\n";
    }
    print "  </p>\n";
    print "\n";
    ?>
    

Matrices (3) 4 - Cartas de un palo, sin repetición

<?php
// Guardamos los valores de las cartas en la matriz $cartas
$n = rand(5, 10);
$cartas = range(1, 10);
// Barajamos las cartas
shuffle($cartas);
// Creamos una nueva matriz con los primeros valores de $cartas (el número de valores que queremos mostrar)
for ($i = 0; $i < $n; $i++) {
    $cartas2[] = $cartas[$i];
}

// Mostramos las imágenes de las cartas guardadas en $cartas2
print "  <h2>$n cartas sin repetición</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas2 as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";
?>

Matrices (3) 11 - Cartas extremas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
$n = rand(5, 10);
for ($i = 0; $i < $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Cartas</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/t$carta.svg\" alt=\"$carta de tréboles\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Calculamos y mostramos los valores máximo y mínimo
print "<p>La carta más alta es un " . max($cartas) . " y la carta más baja es un " . min($cartas) . "</p>\n";
print "\n";

?>

Matrices (3) 12 - Las cartas más altas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
$n = rand(5, 10);
for ($i = 0; $i < $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Cartas</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/t$carta.svg\" alt=\"$carta de tréboles\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Calculamos el valor máximo
$eliminar = max($cartas);

// Mostramos el valor máximo
print "<p>La carta más alta es un $eliminar.</p>\n";
print "\n";

// Mostramos la carta de valor máximo
print "  <h2>Carta a eliminar</h2>\n";
print "\n";
print "  <p>\n";
print "    <img src=\"img/cartas/t$eliminar.svg\" alt=\"$eliminar de tréboles\" width=\"100\">\n";
print "  </p>\n";
print "\n";

// Recorremos la matriz de valores de cartas y eliminamos los elementos que coinciden con el máximo
for ($i = 0; $i < $n; $i++) {
    if ($cartas[$i] == $eliminar) {
        unset($cartas[$i]);
    }
}

// Mostramos las imágenes de las cartas (las eliminadas ya no se mostrarán)
print "  <h2>Cartas restantes</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/t$carta.svg\" alt=\"$carta de tréboles\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Calculamos y mostramos el valor máximo actual
print "<p>La carta más alta es ahora un " . max($cartas) . ".</p>\n";
print "\n";

?>

Matrices (3) 13 - Eliminar repetidos

<?php
$numero = rand(5, 15);

// Guardamos los valores de las bolas en la matriz $bolas
$bolas = [];
for ($i = 0; $i < $numero; $i++) {
    $bolas[$i] = rand(10102, 10111);
}

// Mostramos las imágenes de las bolas obtenidas
print "  <h2>Entre estas $numero bolas ...</h2>\n";

print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($bolas as $bola) {
    print "    &#$bola;\n";
}
print "  </p>\n";
print "\n";

// Eliminamos las bolas duplicadas
$resultado = array_unique($bolas);

// Mostramos las imágenes de las bolas restantes
print "  <h2>... hay " . count($resultado) . " bolas distintas</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($resultado as $bola) {
    print "    &#$bola;\n";
}
print "  </p>\n";
print "\n";

?>

Matrices (3) 14 - Buscar emoticono

<?php
$numero = rand(10, 20);

// Guardamos los valores de los emoticonos en la matriz $emoticonos
$emoticonos = [];
for ($i = 0; $i < $numero; $i++) {
    $emoticonos[$i] = rand(128512, 128580);
}

// Mostramos las imágenes de los emoticonos obtenidos
print "  <h2>$numero emoticonos ...</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($emoticonos as $emoticono) {
    print "    &#$emoticono;\n";
}
print "  </p>\n";
print "\n";

// Emoticono a buscar
$busca = rand(128512, 128580);

// Mostramos el resultado de la búsqueda
if (in_array($busca, $emoticonos)) {
    print "  <p>El emoticono <span style=\"font-size: 400%;\">&#$busca;</span> está entre ellos.</p>\n";
} else {
    print "  <p>El emoticono <span style=\"font-size: 400%;\">&#$busca;</span> NO está entre ellos.</p>\n";
}
print "\n";

?>

Matrices (3) 15 - Contar corazones

<?php
$numero = rand(7, 20);

// Guardamos los valores de las frutas en la matriz $frutas
$frutas = [];
for ($i = 0; $i < $numero; $i++) {
    $frutas[$i] = rand(128147, 128152);
}

// Mostramos las imágenes de las frutas obtenidas
print "  <h2>$numero corazones</h2>\n";

print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($frutas as $fruta) {
    print "    &#$fruta;\n";
}
print "  </p>\n";
print "\n";

// Contamos las frutas
$cuenta = array_count_values($frutas);

// Mostramos el resultado de contar las frutas
print "  <h2>Conteo</h2>\n";
print "\n";

foreach ($cuenta as $indice => $valor) {
    print "  <p style=\"font-size: 400%; margin: 0;\">&#$indice; $valor</p>\n";
}

print "\n";

?>

Matrices (3) 16 - Unir matrices

<?php
// Definimos las matrices con los rangos de emoticonos
$emoticonos_1 = range(128512, 128580);
$emoticonos_2 = range(129296, 129303);
$emoticonos_3 = range(129312, 129327);
$emoticonos_4 = [129392, 129393];
$emoticonos_5 = range(129395, 129398);
$emoticonos_6 = [129402, 129488];

// Unimos las matrices en una sola
$emoticonos = array_merge($emoticonos_1, $emoticonos_2, $emoticonos_3, $emoticonos_4, $emoticonos_5, $emoticonos_6);

// Mostramos las imágenes de los emoticonos obtenidos
print "  <h2>". count($emoticonos) . " emoticonos</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">\n";
foreach ($emoticonos as $emoticono) {
    print "    &#$emoticono;\n";
}
print "  </p>\n";
print "\n";

// Mostramos un emoticono al azar
print "  <h2>Uno al azar</h2>\n";
print "\n";
print "  <p style=\"font-size: 400%; margin: 0;\">&#". $emoticonos[rand(0, count($emoticonos)-1)] . ";</p>\n";

?>

Matrices (3) 21 - Tirada ordenada

<?php
$numero = rand(2, 7);

// Creamos la matriz de dados aleatorios
$dados = [];
for ($i = 0; $i < $numero; $i++) {
    $dados[$i] = rand(1, 6);
}

// Mostramos los dados
print "  <h2>Tirada de $numero dados</h2>\n";
print "\n";
print "  <p>\n";
foreach ($dados as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Ordenamos los dados
sort($dados);

// Mostramos los dados ordenados
print "  <h2>Tirada ordenada</h2>\n";
print "\n";
print "  <p>\n";
foreach ($dados as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";

?>

Matrices (3) 22 - Ordenar cartas

<?php
$numero = rand(5, 10);

// Creamos la matriz de cartas aleatorias
$cartas = [];
for ($i = 0; $i < $numero; $i++) {
    $cartas[$i] = rand(127169, 127173);
}

// Mostramos las cartas
print "  <h2>Mano de $numero cartas</h2>\n";
print "\n";
print "  <p style=\"font-size: 700%; margin: 0; line-height: 100%;\">\n";
foreach ($cartas as $carta) {
    print "    &#$carta;\n";
}
print "  </p>\n";
print "\n";

// Ordenamos las cartas
$cartas_2 = array_unique($cartas);
sort($cartas_2);

// Mostramos las cartas ordenadas
print "  <h2>Cartas distintas obtenidas (ordenadas)</h2>\n";
print "\n";
print "  <p style=\"font-size: 700%; margin: 0; line-height: 100%;\">\n";
foreach ($cartas_2 as $carta) {
    print "    &#$carta;\n";
}
print "  </p>\n";
print "\n";

// Contamos las cartas
$cartas_3 = array_count_values($cartas);

// Mostramos las cartas contadas
print "  <h2>Número de cartas obtenidas (sin ordenar)</h2>\n";
print "\n";
print "  <p style=\"line-height: 600%;\">\n";
foreach ($cartas_3 as $indice => $valor) {
    print "    <span style=\"font-size: 500%;\">$valor</span> <span style=\"font-size: 700%;\">&#$indice; - </span>\n";
}
print "  </p>\n";
print "\n";

// Ordenamos las cartas
arsort($cartas_3);

// Mostramos las cartas contadas ordenadas
print "  <h2>Número de cartas obtenidas (ordenada)</h2>\n";
print "\n";
print "  <p style=\"line-height: 600%;\">\n";
foreach ($cartas_3 as $indice => $valor) {
    print "    <span style=\"font-size: 500%;\">$valor</span> <span style=\"font-size: 700%;\">&#$indice; - </span>\n";
}
print "  </p>\n";

?>

Matrices (3) 23 - Jugada de Risk

<?php
// Mostramos con cuántos dados va a jugar el Atacante
print "  <h2>Atacante</h2>\n";
print "\n";
$numero1 = rand(1, 3);
if ($numero1 == 1) {
    print "  <p>El atacante ataca con $numero1 dado:</p>\n";
} else {
    print "  <p>El atacante ataca con $numero1 dados:</p>\n";
}
print "\n";

// Guardamos los valores del Atacante en la matriz $dados1
$dados1 = [];
for ($i = 0; $i < $numero1; $i++) {
    $dados1[$i] = rand(1, 6);
}

// Ordenamos la matriz $dados2 y mostramos los resultados obtenidos por el Atacante
rsort($dados1);
print "  <p>\n";
foreach ($dados1 as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Mostramos con cuántos dados va a jugar el Defensor
print "  <h2>Defensor</h2>\n";
print "\n";
$numero2 = rand(1, 2);
if ($numero2 == 1) {
    print "  <p>El defensor defiende con $numero2 dado:</p>\n";
} else {
    print "  <p>El defensor defiende con $numero2 dados:</p>\n";
}
print "\n";

// Guardamos los valores del Defensor en la matriz $dados2
$dados2 = [];
for ($i = 0; $i < $numero2; $i++) {
    $dados2[$i] = rand(1, 6);
}

// Ordenamos la matriz $dados2 y mostramos los resultados obtenidos por el Defensor
rsort($dados2);
print "  <p>\n";
foreach ($dados2 as $dado) {
    print "    <img src=\"img/$dado.svg\" alt=\"$dado\" width=\"100\" height=\"100\">\n";
}
print "  </p>\n";
print "\n";

// En los acumuladores $bajasAtacante $bajasDefensor contamos cuántas partidas ha perdido cada uno
// El número de dados que se compara es el menor de los números de dados tirados
$menor = min($numero1, $numero2);
$bajasAtacante = 0;
$bajasDefensor = 0;
for ($i = 0; $i < $menor; $i++) {
    if ($dados1[$i] > $dados2[$i]) {
        $bajasDefensor++;
    } else {
        $bajasAtacante++;
    }
}

// Mostramos cuántas bajas ha tenido cada jugador
print "  <h2>Resultado</h2>\n";
print "\n";
print "  <p>El atacante pierde <strong>$bajasAtacante</strong> unidad";
if ($bajasAtacante != 1) {
    print "es";
}
print ". El defensor pierde <strong>$bajasDefensor</strong> unidad";
if ($bajasDefensor != 1) {
    print "es";
}
print ".</p>\n";

?>

Matrices (3) 24 - Reparto de cartas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
// $n es el número de cartas que repartiremos a cada jugador,
// por lo que generamos 2 * $n cartas
$n       = rand(2, 6);
$cartas = [];
for ($i = 0; $i < 2 * $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Las " . 2 * $n . " cartas a repartir</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Barajamos los valores de las cartas
shuffle($cartas);

// Creamos una matriz con las $n primeras cartas
$cartasA = [];
for ($i = 0; $i < $n; $i++) {
    $cartasA[] = $cartas[$i];
}

// Creamos una matriz con las $n siguientes cartas
for ($i = 0; $i < $n; $i++) {
    $cartasB[] = $cartas[$i+ $n];
}

// Mostramos las imágenes de las cartas del primer jugador
print "  <h2>Las $n cartas del jugador A</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartasA as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Mostramos las imágenes de las cartas del segundo jugador
print "  <h2>Las $n cartas del jugador B</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartasB as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

?>

Matrices (3) 25 - Cartas pares iguales consecutivas

<?php
// Guardamos los valores de las cartas en la matriz $cartas
$n      = rand(3, 12);
$cartas = [];
for ($i = 0; $i < $n; $i++) {
    $cartas[] = rand(1, 10);
}

// Mostramos las imágenes de las cartas obtenidas
print "  <h2>Las $n cartas</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Recorremos la matriz de cartas y si el valor de la carta es par, eliminamos el valor
for ($i = 0; $i < $n; $i++) {
    if ($cartas[$i] % 2) {
        unset($cartas[$i]);
    }
}

// Mostramos las imágenes de las cartas (las eliminadas ya no se mostrarán)
print "  <h2>Sin cartas impares</h2>\n";
print "\n";
print "  <p>\n";
foreach ($cartas as $carta) {
    print "    <img src=\"img/cartas/c$carta.svg\" alt=\"$carta de corazones\" width=\"100\">\n";
}
print "  </p>\n";
print "\n";

// Reindexamos la matriz de cartas para poderla recorrer con un bucle for
// y que los índices sean consecutivos
$cartas = array_values($cartas);

// Recorremos la matriz de cartas (hasta el penúltimo valor)
// comparando cada valor con el siguiente y si coinciden
// damos el valor true a la variable testigo $consecutivas
$consecutivas = false;
for ($i = 0; $i < count($cartas) - 1; $i++) {
    if ($cartas[$i] == $cartas[$i + 1]) {
        $consecutivas = true;
    }
}

// Según el valor de consecutivas mostramos un mensaje distinto
print $consecutivas ? "<p>Hay cartas iguales consecutivas</p>\n" : "<p>No hay cartas iguales consecutivas</p>\n";

?>