Ejercicio arrays

 <div class="container">
            <h1 >Media aritmética</h1>
            <input type="number" id="numero">
            <input type="button" id="botontirar" value="Añadir">
            <input type="button" id="botondeshacer" value="Deshacer">
            <input type="button" id="botonreset" value="Empezar de nuevo">
            <div id="resultado"></div>
            <script>
                document.getElementById("botontirar").addEventListener("click", calcular);
                document.getElementById("botondeshacer").addEventListener("click", deshacer);
                document.getElementById("botonreset").addEventListener("click", reset);
                var numeros = [];
                function reset() {
                    numeros = [];
                    document.getElementById('resultado').innerHTML = "";
                }
                function deshacer() {
                    numeros.pop();
                    document.getElementById('resultado').innerHTML = "<p>" + numeros.toString() + "</p>";
                    document.getElementById('resultado').innerHTML += "<p>Media: " + mediaAritmetica(numeros) + "</p>";
                }
                function calcular() {
                    var numero = parseInt(document.getElementById('numero').value);
                    numeros.push(numero);
                    document.getElementById('resultado').innerHTML = "<p>" + numeros.toString() + "</p>";
                    document.getElementById('resultado').innerHTML += "<p>Media: " + mediaAritmetica(numeros) + "</p>";
                    document.getElementById('numero').value = "";
                }
                function mediaAritmetica(tabla) {
                    var suma = 0;
                    for (var i = 0; i < tabla.length; i++) {
                        suma += tabla[i];
                    }
                    return suma / tabla.length;
                }
            </script>
        </div>

Ejercicio palabras mal escritas

 <style>
 .celdako,.celdaok{
 cursor: pointer;
 width:100px;
 height:50px;
 text-align: center;
 }
 .celdaok:active {
 background-color:lightgreen;
 
 }
 .celdako:active {
 background-color: red;
 }

 </style>

<?php

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

 $palabras = array(
 array('length', array('lenght', 'legnth', 'langth', 'lentgh', 'lenhgt')),
 array('locomotion', array('lomocotion', 'lotocomion', 'molocotion', 'locamotion', 'locomocion')),
 array('bedroom', array('vedroom', 'bedrum', 'berdoom', 'bedrun', 'bedroon', 'beddroom')),
 array('coin', array('coyn', 'cony', 'cain', 'con')),
 array('stable', array('estable', 'stoble', 'stabel', 'tsable')),
 array('crush', array('cruhs', 'clush', 'cruss', 'crusah')),
 array('fantasy', array('fantasi', 'fantascy', 'fatnasy', 'frantasy')),
 array('pillow', array('pellow', 'pillou', 'pilluw', 'pilow', 'pilou')),
 );

 function array_to_table($tabla, $buena,$ancho=2) {
 $res = "<table border=1>";
 for ($i = 0; $i < count($tabla); $i++) {
 if ($i % $ancho == 0) {
 $res .= "<tr>";
 }
 $res .= '<td class="' . ($tabla[$i] == $buena ? 'celdaok' : 'celdako') . '">' . $tabla[$i] . "</td>";
 if ($i % $ancho == $ancho-1) {
 $res .= "</tr>";
 }
 }
 $res .= "</table>";
 return $res;
 }

 //Seleccionar una palabra al azar rand (0,count($palabras)-1)

 $palabra = $palabras[rand(0, count($palabras) - 1)];
 // muestraTabla($palabra);
 //Coger la palabra buena y seleccionar tres palabras malas al azar
 $tablero[] = $palabra[0];
 // $malos = $palabra[1];

 //shuffle($malos);
 //$malos=array_slice($malos, 0, 8);
 $tablero = array_merge($tablero, $palabra[1]);
 while (count($tablero)<9){
 $a=$palabras[array_rand($palabras)];
 
 $palazar=$a[1][array_rand($a[1])];
 if (!in_array($palazar, $tablero)){
 $tablero[]=$palazar;
 }
 }
 // muestraTabla($tablero);
 //Mezclar
 shuffle($tablero);
 //Y mostrar
 echo array_to_table($tablero, $palabra[0],3);
 ?>

Funciones esMagico y crearCuadrado

 function cuadrado_magico($ancho) {
 if ($ancho % 2 == 0)
 $ancho--;
 $posy = 0;
 $posx = floor($ancho / 2);
 $cont = 1;

 while ($cont <= $ancho ** 2) {
 if (empty($c[$posy][$posx])) {
 $c[$posy][$posx] = $cont++;
 $posx = ($posx + 1) % $ancho;
 $posy = ($posy - 1 + $ancho) % $ancho;
 } else {
 $posx = ($posx - 1 + $ancho) % $ancho;
 $posy = ($posy + 2) % $ancho;
 }
 }
 return $c;
 }

 function esMagico($t) {
 //Sumo la primera fila para tener un valor de referencia 
 $sum = array_sum($t[0]);
 $sd1 = 0;
 $sd2 = 0;
 for ($i = 0; $i < count($t); $i++) {
 $sf = 0;
 $sc = 0;
 $sd1 += $t[$i][$i];
 $sd2 += $t[$i][count($t) - 1 - $i];
 for ($j = 0; $j < count($t[$i]); $j++) {
 $sf += $t[$i][$j]; //Sumo la fila
 $sc += $t[$j][$i]; //Sumo la columna
 }
 //Si fila o columna son diferentes al valor de referencia no es mágico
 if ($sf != $sum || $sc != $sum) {
 return false;
 }
 }
 
 return !($sd1 != $sum || $sd2 != $sum);
 
 }

Funciones de arrays (VI)

Funciones para mezclar o comparar arrays:

array_diff()

array_intersect()

array_merge()

array_unique()

Funciones de suma y producto:

array_sum()

array_product()

Funciones de mezcla de variables y array:

compact()

list()

Pasar una función a cada elemento del array:

array_walk()

Ejemplo de este último:

$frutas = array("d" => "limón", "a" => "naranja", "b" => "banana", "c" => "manzana");

function test_alter(&$elemento1, $clave, $prefijo)
{
    $elemento1 = "$prefijo: $elemento1";
}

function test_print($elemento2, $clave)
{
    echo "$clave. $elemento2
\n";
}

echo "Antes ...:\n";
array_walk($frutas, 'test_print');

array_walk($frutas, 'test_alter', 'fruta');
echo "... y después:\n";

array_walk($frutas, 'test_print');

Funciones para convertir un array bidimensional en html

 function array_to_table($tabla) {
 $res = "<table border=1>";
 for ($i = 0; $i < count($tabla); $i++) {
 $res .= "<tr>";
 for ($j = 0; $j < count($tabla[$i]); $j++) {
 $res .= "<td>" . $tabla[$i][$j] . "</td>";
 }
 $res .= "</tr>";
 }
 $res .= "</table>";
 return $res;
 }

 function array_to_table2($tabla) {
 $res = "<table border=1>";
 foreach ($tabla as $n) {
 $res .= "<tr>";
 foreach ($n as $el) {
 $res .= "<td>" . $el . "</td>";
 }
 $res .= "</tr>";
 }
 $res .= "</table>";
 return $res;
 }

Arrays multidimensionales

En PHP los arrays multidimensionales se crean con arrays dentro de arrays:

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

 $m=array(
 array(1,2),
 array(3,4),
 
 );
 muestraTabla($m);
 
 
 for($i=0;$i<count($m);$i++){
 for ($j=0;$j<count($m[$i]);$j++){
 echo $m[$i][$j]."<br/>";
 }
 }
 foreach ($m as $n){
 foreach ($n as $el){
 echo $el."<br/>";
 }
 }

Podemos tener las dimensiones que queramos:

 $m = array(
 array(
 array(0, 1),
 array(2, 3)
 ),
 array(
 array(4, 5),
 array(6, 7)
 ),
 array(
 array(8, 9),
 array(10, 11)
 ),
 );
 muestraTabla($m);


 for ($i = 0; $i < count($m); $i++) {
 for ($j = 0; $j < count($m[$i]); $j++) {
 for ($k = 0; $k < count($m[$i][$j]); $k++) {
 echo $m[$i][$j][$k] . "<br/>";
 }
 }
 }
 foreach ($m as $n) {
 foreach ($n as $el) {
 foreach ($el as $e) {
 echo $e . "<br/>";
 }
 }
 }

Lo mismo que usamos para recorrer lo podemos usar para generar:

 for ($i = 0; $i < 10; $i++) {
 for ($j = 0; $j < 10; $j++) {
 $m[$i][$j]=$j+$i*10;
 }
 }
 muestraTabla($m);

Un array puede ser cualquier combinación de valores, asociativos, arrays dentro de arrays dentro de arrays….

 $tablaLoca = array(
 "juan",
 "pepe" => array(1, 2, 3),
 array(
 array("a","b"),
 "w"
 ),
 5,
 "ppp"=>array(
 "q"=>3,
 "w"=>array(1,2,array(7,8))
 )
 );
muestraTabla($tablaLoca);

Si quisiéramos acceder a los valores de una tabla como la anterior necesitaríamos una función recursiva:

 function valores($var){
 $res="";
 if (is_array($var)){
 foreach($var as $v){
 $res.=valores($v);
 }
 }
 else{
 $res=$var.",";
 }
 return $res;
 }
 echo valores($tablaLoca);

Ordenar por funciones propias

Con usort(), uasort() y uksort() podemos ordenar por funciones propias. Esto nos da mucha flexibilidad a la hora de ordenar. Ejemplos:

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

 function miOrden($a, $b) {
 $la = strlen($a);
 $lb = strlen($b);

 return $la < $lb ? -1 : 1;
 }

 function acentos($name1, $name2) {
 $patterns = array(
 'a' => '(á|à|â|ä|Á|À|Â|Ä)',
 'e' => '(é|è|ê|ë|É|È|Ê|Ë)',
 'i' => '(í|ì|î|ï|Í|Ì|Î|Ï)',
 'o' => '(ó|ò|ô|ö|Ó|Ò|Ô|Ö)',
 'u' => '(ú|ù|û|ü|Ú|Ù|Û|Ü)',
 'n '=>'(ñ)'
 );
 $name1 = preg_replace(array_values($patterns), array_keys($patterns), $name1);
 $name2 = preg_replace(array_values($patterns), array_keys($patterns), $name2);
 return strcasecmp($name1, $name2);
 }

 $array1 = array("no", "ño", "na", "ña","ánimo","oído","ópera","nzuelo");

 usort($array1,'miOrden');
 muestraTabla($array1);
 usort($array1,'acentos');
 muestraTabla($array1);

Ordenar arrays

Nombre de la función Ordena por Mantiene asociación con las key Orden de la clasificación Funciones relacionadas
array_multisort() valor sí si es asociativa, no si es númerica primer array u opciones de clasificación array_walk()
asort() valor menor a mayor arsort()
arsort() valor mayor a menor asort()
krsort() key mayor a menor ksort()
ksort() key menor a mayor asort()
natcasesort() valores natural, insensible a mayúsculas y minúsculas natsort()
natsort() valor natural natcasesort()
rsort() valor no mayor a menor sort()
shuffle() valor no aleatorio array_rand()
sort() valor no menor a mayor rsort()
uasort() valor definido por el usuario uksort()
uksort() key definido por el usuario uasort()
usort() valor no definido por el usuario uasort()

Funciones Array (V)

Funciones de búsqueda en arrays:

in_array()

array_search()

array_key_exists()

Ejemplos:

 $tabla=range("a","j");
 
 if (in_array("b",$tabla)){
 echo "Está la b<br/>";
 }
 if (in_array("w",$tabla)){
 echo "Está la w<br/>";
 }
 
 $pos= array_search("b", $tabla);
 echo "|".$pos."|<br/>";
 $pos= array_search("w", $tabla);
 echo "|".$pos."|<br/>";
 
 $asociativa=array("a"=>1,"b"=>2,"c"=>3,"d"=>4,);
 $pos= array_search(3, $asociativa);
 echo "|".$pos."|<br/>";
 
 if (array_key_exists("d",$asociativa)){
 echo "Existe la clave d<br/>";
 }

Funciones Array (IV)

Obtener partes de un array y modificarlo:

array_slice()

array_splice()

Ejemplos:

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

 $entrada = array("rojo", "verde", "azul", "amarillo");
 array_splice($entrada, 2);
 // $entrada ahora es array("rojo", "verde")
 muestraTabla($entrada);
 $entrada = array("rojo", "verde", "azul", "amarillo");
 array_splice($entrada, 2,1);
 // $entrada ahora es array("rojo", "verde","amarillo")
 muestraTabla($entrada);
 $entrada = array("rojo", "verde", "azul", "amarillo");
 array_splice($entrada, 1, -1);
 // $entrada ahora es array("rojo", "amarillo")
 muestraTabla($entrada);

 $entrada = array("rojo", "verde", "azul", "amarillo");
 $foo=array_splice($entrada, 1, count($entrada), "naranja");
 // $entrada ahora es array("rojo", "naranja")
 //$foo es array("verde","azul","amarillo")
 muestraTabla($entrada);
 muestraTabla($foo);

 $entrada = array("rojo", "verde", "azul", "amarillo");
 array_splice($entrada, -1, 1, array("negro", "granate"));
 // $entrada ahora es array("rojo", "verde",
 // "azul", "negro", "granate")
 muestraTabla($entrada);

 $entrada = array("rojo", "verde", "azul", "amarillo");
 array_splice($entrada, 3, 0, "púrpura");
 // $entrada ahora es array("rojo", "verde",
 // "azul", "púrpura", "amarillo");
 muestraTabla($entrada);
 
 $tabla=range("a","j");
 $a=array_slice($tabla,3);
 muestraTabla($a);
 $a=array_slice($tabla,3,2);
 muestraTabla($a);
 $a=array_slice($tabla,-3);
 muestraTabla($a);
 $a=array_slice($tabla,-3,1);
 muestraTabla($a);
 $a=array_slice($tabla,-4,-2);
 muestraTabla($a);