CARGAR UN VECTOR, DESORDENARLO Y REAPAREARLO CON EL PRIMERO
Antes de parsear el string $original que devuelve textarea, como algunos exploradores usan
\r\n en lugar de \n para fin de linea para no tener problemas eliminamos los \r con
str_replace("\r", "", $original). luego pasamos del $original al
vector $valores01 con explode("\n",$original).
Antes de copiarlo pasamos un bucle while que arranca en 0 hasta el N° de valores del vector
y que detecta con empty() si un valor está vacío (producido por tipear dos o más veces enter), y
si es el caso con unset($valores01[$i]); lo borramos del vector.
Luego de copiarlo a $valores02 lo desordeno aleatoriamente con shuffle($valores02).
La idea ahora es aparear cada valor del original con uno aleatorio del mismo vector. Para esto usamos un bucle
while que arranca en 1 hasta el N° de valores del vector y va asignando a $valores03 el nombre
siguiente en $valores02 (esto es así porque $valores03 arranca en el índice cero, por defecto, pero
$valores02 en 1 finalmente fuera del bucle al último valor de 03 le asignamos el nombre en el primero de 02).
Ahora cada nombre del original tiene asignado uno al azar sin que nunca le corresponda su propio valor.
<head>
<?php
$valores01=array(); //originales
$valores02=array(); //desordenados al azar
$valores03=array(); //reapareados 2 a 2
if (isset( $_POST["original"])){
if (strlen( $_POST["original"])>0){ //me asegura que haya nombres
$original=$_POST["original"];
$original=str_replace("\r", "", $original); //algunos fin de linea pueden ser \r\n elimino \r
$valores01=explode("\n",$original); //convierto string en vector
$final=count($valores01); //cuento los valores ingresados (incluidos los ""
$i=0; //por doble enter o enter final)
while ($i<$final) {
If(empty($valores01[$i])){ //elimina los valores si damos doble enter
unset($valores01[$i]);
}
$i++;
}
$valores02=$valores01; // copio el vector a 02
shuffle($valores02); //desordeno 02
$final=count($valores02); //cuento los valores depurados y mezclados
$i=1; //arranco en el 2° del desordenado
while ($i<$final) { //bucle hasta el último valor
array_push($valores03,$valores02[$i]);// meto como valor03 el nombre siguiente
$i++; //aumento el índice
}
array_push($valores03,$valores02[0]); //finalmente al último 03 le asignoel 1° 02
}else{
array_push($valores01,"no se cargaron nombres");
}
}
?>
</head>
<body>
<div style="margin: 0 auto; margin-left:15px; ">
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" >
<div class="item">
CARGAR UN VECTOR, DESORDENARLO Y REAPAREARLO CON EL PRIMERO
</div>
<div class="item">
Cargar los nombres para el vector en columna(enter después de cada uno)<br/>
<textarea name="original" type="text" style="width:250px;height:100px;"></textarea>
</div>
<div class="item">
<input name="maxmin" type="submit" value="Procesar" />
</div>
</form>
<div style="margin-top: 30px; margin-bottom: 30px;">
</div>
<div style=" margin-left:30px; margin-top:20px;">
<div class="resultado" >
<strong><u>Original</u></strong><br/><br/>
<?php
//echo $original;
foreach($valores01 as $val) {
echo( $val . "<br>");
}
?>
</div>
<div class="resultado" style="margin-left:20px;">
<strong><u> Aleatorio</u></strong><br/><br/>
<?php
foreach($valores02 as $val) {
echo( $val . "<br>");
}
?>
</div>
<div class="resultado" style="margin-left:20px;">
<strong><u>Reapareado</u></strong><br/><br/>
<?php
foreach($valores03 as $val) {
echo( $val . "<br>");
}
?>
</div>
</div>
</div>
</body>