PHP Modificación y obtención de submatrices

Vamos a ver algunas funciones PHP que nos permiten modificar elementos de una matriz y también obtener una submatriz.
Todas estas funciones retornan una nueva matriz con las operaciones aplicadas, es decir, no aplican modificaciones a la matriz original.

Modificación de elementos de una matriz

Veremos las siguientes funciones:

  • array_flip($matriz), cambia los índices por los valores
  • array_reverse($matriz,[true]), da la vuelta a una matriz, con true conservará los valores originales para los índices
  • array_change_key_case($matriz,[CASE_UPPER/CASE_LOWER]), cambia a minúsculas/mayusculas los índice de un vector

Veamos una serie de ejemplos

<?php
function mostrar($matriz)
	{
	foreach ($matriz as $indice=>$contenido)
		echo "<p>El indice es: <b>".$indice."</b> EL contenido es:<b> ".$contenido."</p>";
	echo "<p>___________________________________________________</p>";
	}

$matriz=array("Cero"=>0,"Uno"=>1,"Dos"=>2,"Tres"=>3);
echo "<p>Esta es la matriz original</p>";
mostrar($matriz);
echo "<p>Esta es la matriz FLIP</p>";
mostrar(array_flip($matriz));
echo "<p>Esta es la matriz REVERSER</p>";
mostrar(array_reverse($matriz));
echo "<p>Ahora vamos a provar array_reverse con TRUE y una matriz escalar</p>";
echo "<p>Para probarla tomaremos como original a la matriz FLIP:</p>";
mostrar(array_reverse(array_flip($matriz)));
echo "<p>Esta es la matriz REVERSE de un escalar</p>";
mostrar(array_reverse(array_flip($matriz),TRUE));
echo "<p>Vamos a probar ARRAY_CHANGE_KEY_CASE</p>";
mostrar(array_change_key_case($matriz));
mostrar(array_change_key_case($matriz,CASE_UPPER));
?>

Veamos un pequeño ejercicio

  • Cambia esta frase a mayúsculas: “Hola que tal”
  • <?php
    function convertir_mayusculas($matriz)
    	{
    	foreach ($matriz as $indice=>$contenido)
    		echo "<p>Esta es la frase en mayusculas: ".$indice;
    	echo "<p>___________________________________________________</p>";
    	}
    	
    $frase[0]="Hola que tal";
    convertir_mayusculas(array_change_key_case(array_flip($frase),CASE_UPPER));
    ?>
    
  • Haz la función convertir minúsculas
  • Como harías para convertir a mayúsculas y mostrar al reves (usa el convertir_mayusculas y la función reverse)

Obtención de submatrices

Obtener una submatriz es sacar una parte de ella. Para hacerlo PHP proporciona las siguiente funciones:

  • array_filter($array,’filtro’), deberemos usar una función filtro que retorne TRUE O false
  • array_slice($matriz,$posicion,[tamanio,true]), devuelve la parte que va desde $posición adelante $tamanio veces
  • array_chunk($matriz,$tamanio,[true])
  • , parte una matriz en partes de tamaño $tamanio, menos la última parte,

Ejemplos de uso

<?php
$matriz=array(0,1,2,3,4,5,6,7,8,9);
function filtro_pares($valor)
	{
	if ($valor % 2==0)
		return
			TRUE;
	return FALSE;
	}
function filtro_impares($valor)
	{
	return !filtro_pares($valor);
	}

function mostrar($matriz,$mensaje)
	{
	echo "<p>$mensaje</p>";
	foreach ($matriz as $indice=>$contenido)
		echo "<p>El indice es: ".$indice." EL contenido es: ".$contenido."</p>";
	echo "<p>___________________________________________________</p>";
	}

mostrar(array_filter($matriz,'filtro_pares'),"Probando los filtros pares");
mostrar(array_filter($matriz,'filtro_impares'),"Probando los filtros impares");
mostrar(array_slice($matriz,0,4),"Probando los SLICE");
$trozos=array_chunk($matriz,4);
foreach ($trozos as $trozito)
	mostrar($trozito,"Probando ");
?>

Ejemplo para girar una frase

<?php
function invertir_frase($frase)
    {
    for ($i=0;$i<12;$i++)
        $frase_por_letras[$i]=$frase[$i];
    
    return array_reverse($frase_por_letras);
    }
 
$frase=invertir_frase("Hola que tal");
foreach ($frase as $letra)
	echo $letra;
?>

Originally posted 2011-02-22 20:15:11.

One Response to “ PHP Modificación y obtención de submatrices ”

  1. Nandy dice:

    Como harias para convertir a mayusculas y mostrar al reves (usa el convertir_mayusculas y la funcion reverse)
    $contenido)
    echo “El indice es: “.$indice.” EL contenido es: “.$contenido.”“;
    echo “___________________________________________________”;
    }
    $matriz=array(0=>”h”,1=>”o”,2=>”l”,3=>”a”,4=>” “,5=>”q”,6=>”u”,7=>”e”,8=>” “,9=>”t”,10=>”a”,11=>”t”);
    convertir_reverse(array_reverse(array_flip($matriz)));
    convertir_reverse(array_change_key_case(array_flip($matriz),CASE_UPPER));
    ?>

Deja un comentario