Loco TE QUIERO!
Para el que necesite algo similar, en http://www.php.net/manual/en/function.uasort.php hay una función para diferentes tipos de ordenaciones:
# MultiSort
# Util para Noticias Relacionadas
function multisort($array)
{
for($i = 1; $i < func_num_args(); $i += 3)
{
$key = func_get_arg($i);
$order = true;
if($i + 1 < func_num_args())
$order = func_get_arg($i + 1);
$type = 0;
if($i + 2 < func_num_args())
$type = func_get_arg($i + 2);
switch($type)
{
case 1: // Case insensitive natural.
$t = 'strcasenatcmp($a[' . $key . '], $b[' . $key . '])';
break;
case 2: // Numeric.
$t = '$a[' . $key . '] - $b[' . $key . ']';
break;
case 3: // Case sensitive string.
$t = 'strcmp($a[' . $key . '], $b[' . $key . '])';
break;
case 4: // Case insensitive string.
$t = 'strcasecmp($a[' . $key . '], $b[' . $key . '])';
break;
default: // Case sensitive natural.
$t = 'strnatcmp($a[' . $key . '], $b[' . $key . '])';
break;
}
uasort($array, create_function('$a, $b', 'return ' . ($order ? '' : '-') . '(' . $t . ');'));
}
return $array;
}
Yo en mi caso he usado
multisort($ptemp, "'id'", true, 0, "'puntos'", false, 2);
y editado el array para que esté compuesto por 2 campos:
Array
(
[2] => Array
(
[puntos] => 6
[id] => 3
)
[3] => Array
(
[puntos] => 4
[id] => 2
)
[4] => Array
(
[puntos] => 3
[id] => 1
)
[1] => Array
(
[puntos] => 2
[id] => 4
)
)
PD: Por si a alguien le entra curiosidad, es para un sistema de noticias relacionadas. Muestra las x noticias que más tengan relación con la que has leído, basándose en puntos.