Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/07/2003, 18:03
leonardop
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Es una interesante pregunta. No entendí muy bien si quieres que cada voto tenga un valor distinto a las visitas, o que "pesen" básicamente lo mismo... es decir, que el valor total de una web sea simplemente la suma de los dos valores.

En cualquier caso, y si no te he malinterpretado, creo que algo como esto podría aplicarse a tu problema:

Código:
<?php

// Estructura con la informacion de las "webs". Esta forma de disenyar
// la estructura el completamente arbitraria.

$datos = array (array ('nombre' => 'web1', 'visitas' => 3, 'votos' => 1),
                array ('nombre' => 'web2', 'visitas' => 5, 'votos' => 2),
                array ('nombre' => 'web3', 'visitas' => 2, 'votos' => 0),
                array ('nombre' => 'web4', 'visitas' => 8, 'votos' => 8));

$cantidad = count ($datos);  // Tamanyo del arreglo

// Ahora, para presentarlos en orden, se asume que el "valor" de cada
// web es dado simplemente por la suma de sus visitas y sus votos (es
// decir, la cantidad de visitas es igual de importante que el numero
// de votos).

$valores = array();  // Arreglo temporal

for ($i = 0; $i < $cantidad; $i++) {
    // Se forma un arreglo temporal para crear una relacion entre cada
    // web y su "valor de orden".
    array_push ($valores, array ('indice' => $i,
                                 'valor' => $datos[$i]['visitas'] +
                                 $datos[$i]['votos']));
}

// Ahora se realiza un ordenamiento en el arreglo temporal,
// implementando una rutina propia con el proposito de no hacer mas
// manipulaciones con los tipos de datos.

// Algoritmo de ordenamiento por seleccion, orden decreciente.

for ($i = 0; $i < $cantidad - 1; $i++) {
    $mayor = $i;

    for ($j = $i + 1; $j < $cantidad; $j++)
        if ($valores[$j]['valor'] > $valores[$i]['valor'])
            $mayor = $j;

    if ($mayor != $i) {
        $aux = $valores[$i];
        $valores[$i] = $valores[$mayor];
        $valores[$mayor] = $aux;
    }
}

// Finalmente... Mostrar los datos en orden.

for ($i = 0; $i < $cantidad; $i++) {
    print $i + 1 . ". " . $datos[$valores[$i]['indice']]['nombre'] . " - " .
        $datos[$valores[$i]['indice']]['votos'] . " votos, " .
        $datos[$valores[$i]['indice']]['visitas'] . " visitas.\n<br />\n";
}

?>
Como verás, me inventé la estructura de tus datos, colocándolos en un arreglo de arreglos. Si los almacenas de otra manera (cosa bastante probable), podrías o bien retocar el código, o quizás agregar un paso previo en el que transformes tus datos a una estructura similar a la que usa este código. Espero que sea fácil de entender. :)