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

Funciones array (I)

Número de elementos:

count()

Poner y quitar elementos:

Del final:

array_pop()

array_push()

Del principio:

array_shift()

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

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/>";
 }

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 (III)

Funciones para crear arrays con rangos o valores:

range()

array_fill()

array_pad()

Ejemplos:

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

 $a = range(1, 5);
 muestraTabla($a);
 $b = range(1, 100, 10);
 muestraTabla($b);
 $c = range('a', 'e');
 muestraTabla($c);

 $d = array_fill(2, 10, "pepe");
 muestraTabla($d);


 $input = array(12, 10, 9);

 $result = array_pad($input, 5, 0);
 // el resultado es array(12, 10, 9, 0, 0)
 muestraTabla($result);
 $result = array_pad($input, -7, 4);
 // el resultado es array(4, 4, 4, 4, 12, 10, 9)
 muestraTabla($result);

 $result = array_pad($input, 2, "noop");
 // sin relleno
 muestraTabla($result);

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

Funciones array (II)

Pasar de cadena a array y viceversa:

explode()

implode()

str_split()

Ejemplos:

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

 $cadena = "hola que tal estamos";
 $tabla = explode(' ', $cadena);
 muestraTabla($tabla);
 $lista = "jamon,pollo,bistec,fuet";
 $carne = explode(",", $lista);
 muestraTabla($carne);
 $letras = str_split($lista);
 muestraTabla($letras);
 
 echo implode('-',$tabla)."<br/>";
 echo implode('***-***',$carne)."<br/>";
 echo implode('.',$letras)."<br/>";

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>