Ejercicio con PHP, strings y bucles

En esta entrada vamos a hacer un ejercicio con PHP en el que ordenaremos dos arrays y mostraremos su contenido concatenado en una sola frase, manteniendo la relación entre los ellos (sus índices) y eliminando resultados repetidos en la frase final. Este tipo fragmentos de código es útil para generadores de documentos que necesitan manipular strings.

En primer lugar se muestra la lista de variables que queremos ordenar, de dos en dos. Luego, esta misma lista ordenada, y más abajo vamos precisando a la hora de mostrar la frase, hasta que se enumeran todos los elementos ordenados y sin deshacer las «parejas» («primero» es pareja de «primera frase», por ejemplo)

A continuación se muestra el resultado de ejecutar el código php en esta misma entrada.


Código del ejemplo

<?php

echo «<!DOCTYPE html><html>
<header><title>Ejercicio de PHP || Blog de desarrollo web || Likonet.es</title></header>
<body>»;

// Tenemos dos arrays
// la tercera frase en quinto lugar es intencionada

$array[]=»cuarto»;
$array[]=»tercero»;
$array[]=»primero»;
$array[]=»segundo»;
$array[]=»segundo»;
$array[]=»tercero»;
$array[]=»segundo»;
$array[]=»cuarto»;
$array[]=»tercero»;

$arraydos[]=»cuarta frase»;
$arraydos[]=»tercera frase»;
$arraydos[]=»primera frase»;
$arraydos[]=»segunda frase»;
$arraydos[]=»segunda frase»;
$arraydos[]=»tercera frase»;
$arraydos[]=»segunda frase»;
$arraydos[]=»cuarta frase»;
$arraydos[]=»tercera frase»;

// Y mostramos su contenido con un for

for ($n=0;$n<count($array);$n++) {

    echo $array[$n].» – «.$arraydos[$n].»<br/>»;

}

echo «<hr>»;

// ordenamos el primer array con la función asort()
// esta función ordenará nuestro array por orden alfabético por defecto

asort($array);

// Mostramos el array con un foreach
// Como la función asort() mantiene los índices,
// podemos usar la variable $key definida en el foreach
// para hacer referencia al segundo array

foreach ($array as $key => $val) {

    echo $arraydos[$key].» – «.$val.»<br/>»;

}

echo «<hr>»;

// vemos cómo se han agrupado, lógicamente, los valores «tercera frase»

// Vamos a mostrarlo denuevo, pero con una frase construida con comas y «y»

// para ello construiremos dos cadenas a recorre con un for

foreach ($array as $key => $val) {

//    echo $arraydos[$key].» – «.$val.»<br/>»;

    $nuevoarraydos[]=$arraydos[$key];

    $nuevoarray[]=$val;

}

// y luego lo recorremos concatenando el resultado en una string

$nuevastring=»»;

for ($j=0;$j<count($nuevoarray);$j++) {

//    echo $nuevoarray[$j].» con «.$nuevoarraydos[$jota];    

    $nuevastring=$nuevastring.$nuevoarray[$j].» con «.$nuevoarraydos[$jota];

}

echo $nuevastring;

echo «<hr>»;

// Vamos a mejorar la construcción de esta frase

$nuevastringdos=»»;

$limite=count($nuevoarray);

for ($j=0;$j<$limite;$j++) {

    if ($j==0) {

        $nuevastringdos=$nuevastringdos.$nuevoarray[$j].» con «.$nuevoarraydos[$j];

    } elseif ($j==($limite-1)) {

    $nuevastringdos=$nuevastringdos.» y «.$nuevoarray[$j].» con «.$nuevoarraydos[$j];

    } else {

    $nuevastringdos=$nuevastringdos.», «.$nuevoarray[$j].» con «.$nuevoarraydos[$j];

    }

}

echo $nuevastringdos;

echo «<hr>»;

// aún se puede mejorar:
// cuando se repita un elemento del primer array,
// se evitará que se muestre para que no suene «redundante»

$nuevastringtres=»»;

$limite=count($nuevoarray);

for ($j=0;$j<$limite;$j++) {

    if ($j==0) {

        $nuevastringtres=$nuevastringtres.$nuevoarray[$j].» con «.$nuevoarraydos[$j];

    } elseif ($j==($limite-1)) {

        if ($nuevoarray[$j]==$nuevoarray[($j-1)]) {

            $puedeocultarse=»»;

        } else {

            $puedeocultarse=$nuevoarray[$j];

}

        $nuevastringtres=$nuevastringtres.» y «.$puedeocultarse.» con «.$nuevoarraydos[$j];

    } else {

        if ($nuevoarray[$j]==$nuevoarray[($j-1)]) {

            if ($nuevoarray[$j]==$nuevoarray[($j+1)]) { $puedeocultarse=»,»; } else {$puedeocultarse=» y»; }

            $coma=»»;

        } else {       

            $puedeocultarse=$nuevoarray[$j];

            $coma=», «;

        }

        $nuevastringtres=$nuevastringtres.$coma.$puedeocultarse.» con «.$nuevoarraydos[$j];

    }

}

echo $nuevastringtres;

echo «<hr>»;

echo «</body></html>»;

?>

Deja un comentario