Foros del Web » Programando para Internet » PHP »

Matriz - Ordenamiento

Estas en el tema de Matriz - Ordenamiento en el foro de PHP en Foros del Web. Buenas !!!! Necesitaría una mano con una matriz multidimensional, que una vez cargada se muestra en pantalla como grilla de datos. Lo que estoy buscando ...
  #1 (permalink)  
Antiguo 11/05/2004, 13:00
 
Fecha de Ingreso: abril-2004
Ubicación: Buenos Aires
Mensajes: 7
Antigüedad: 20 años, 7 meses
Puntos: 0
Matriz - Ordenamiento

Buenas !!!! Necesitaría una mano con una matriz multidimensional, que una vez cargada se muestra en pantalla como grilla de datos. Lo que estoy buscando es poder ordenarla por cualquiera de sus columnas, pero que el algoritmo de ordenamiento me sirva para cualquier matriz de N números de columnas o filas. El punto está en que no sé cómo pasar los parámetros.

Acá les copio el fuente que tengo hasta ahora.

<?PHP

// The multi-dimensional array, as returned by
// looping through mysql_fetch_array(), etc.
$arr[1] = array("volume" => "67", "edition" => "3", "star" => "104");
$arr[2] = array("volume" => "86", "edition" => "1", "star" => "103");
$arr[3] = array("volume" => "85", "edition" => "6", "star" => "102");
$arr[4] = array("volume" => "87", "edition" => "2", "star" => "101");
$arr[5] = array("volume" => "81", "edition" => "8", "star" => "105");
$arr[6] = array("volume" => "65", "edition" => "7", "star" => "106");

// We want to ORDER BY volume DESC, edition ASC.
// We have an array of "rows", but array_multisort()
// requires an array of "columns" instead. Here's how
// to get the arrays of columns.
foreach ($arr as $key => $row)
{
$volume[$key] = $row["volume"];
$edition[$key] = $row["edition"];
$star[$key] = $row["star"];
}

// now arr is ordered

if (isset ($indice))
{
array_multisort($indice, SORT_DESC, $arr);
}
else
{
array_multisort($volume, SORT_ASC, $arr);
}

echo ("<table border=1 align='center'>
<tr>
<form method='post' action='ordenarmatriz.php' name='form'>
<inpit type='hidden' name='indice' value='0'>
<inpit type='hidden' name='array' value='". $arr ."'>
<inpit type='hidden' name='bandera' value='si'>
<td><input type=submit name='Volumen' value='". $arr[1] ."'></td>
<td><input type=submit name='Edicion' value='". $arr[2] ."'></td>
<td><input type=submit name='Star' value='". $arr[3] ."'></td>
");

while (list($k,$v) = each($arr))
{
$v2= $v;
//print_r($v);
while (list($k3,$v3) = each($v2))
{
if (($v3 >= 20) and ($v3 <=90))
{
echo ("<tr><td><font color='red'>");
printf('%s ',$v3);
}
elseif ($v3 >= 100)
{
echo("</font></td><td><font color='green'>");
printf('%s',$v3);
echo("</font></td></tr>");
}
elseif (($v3 <= 20) and ($v3 >= 0))
{
echo ("</font></td><td><font color='blue'>");
printf('%s ',$v3);
}
}
}
echo(" </form>
</tr>
</table>
");
?>



Muchas gracias.
  #2 (permalink)  
Antiguo 13/05/2004, 03:45
 
Fecha de Ingreso: abril-2004
Ubicación: Buenos Aires
Mensajes: 7
Antigüedad: 20 años, 7 meses
Puntos: 0
ALGUIEN PUEDE AYUDARME POR FAVOR ????
  #3 (permalink)  
Antiguo 01/03/2009, 16:11
Avatar de valenti77  
Fecha de Ingreso: julio-2008
Ubicación: Berisso, Buenos Aires
Mensajes: 244
Antigüedad: 16 años, 4 meses
Puntos: 4
Exclamación Respuesta: Matriz - Ordenamiento

Proceso Ordenar (ref M:Matriz, N:entero4,Col:entero 4, Colu:entero4)

Variables
I,J,K:entero4
Aux:El mismo tipo de dato que tiene la matriz
Sigue:Boolean

Hacer
I:=1
sigue:=verd
Repetir Mientras (I<=N And sigue=verd)
sigue:=falso
Repetir Para J:=1, (N-I)
SI (M(I,Col)<M(J,Col) entonces
Repetir Para K:=1,Colu
Aux:=M(I,K)
M(I,K):=M(J,K)
M(j,K):=Aux
Fin Repetir Para
sigue:=verdadero
FinSI
I:=I+1
FinRepetir MIentras
FinHacer
FInprocedimiento


EN el parametro N, vas a poner el tamaño de la matriz, en el parametro COL pones la coluimna por la cual la queres ordenar, y en el parametro colu, la cantidad total de columnas, espero no haberme confundido, cualquier error hacemelo saber, saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:35.