phpbar.de logo

Mailinglisten-Archive

[php] array sortieren..

[php] array sortieren..

Norbert Pfeiffer norbert at itbw.de
Mit Jun 9 01:14:17 CEST 2004


Hi Lutz,

array_multisort() sortiert hier nix!
Weder in der Weise, wie ich es mir dachte und auch
nicht mit Deinem Code aus der vorhergehenden Mail.

Ausserdem benoetigst man offensichtlich wesentlich
mehr als eine Zeile, damit es ueberhaupt laeuft.

uasort() braucht das alles nicht, nur eine immer
wieder gleich aufgebaute Komparisationsfunktion.

<PRE><?php
function getmicrotime() {
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
    }
function comp($A, $B) {
    $a = $A['hits'];
    $b = $B['hits'];
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}
$ARR = array(
'foo' => array('hits'=>1, 'html'=>'asdf.html'),
'bar' => array('hits'=>1, 'html'=>'qwer.html'),
'yxc' => array('hits'=>2, 'html'=>'yxcv.html'),
'qwe' => array('hits'=>1, 'html'=>'ghjk.html'),
'lkj' => array('hits'=>1, 'html'=>'tzui.html'));
print_r($ARR);
$t_ON = getmicrotime();
for($i=0; $i<1000; $i++) {
    $AA = $ARR;
    uasort($AA, 'comp');
}
echo '<B>'.number_format((getmicrotime() - $t_ON),3,',','.').' ms</B> - ';
print_r($AA);
$t_ON = getmicrotime();
for($i=0; $i<1000; $i++) {
    $AA = $ARR;
    $keys = array_keys($AA);
    $hits = array();
    foreach ($keys as $key) {
        array_push ($hits, $AA[$key]['hits']);
    }
    array_multisort($hits, SORT_NUMERIC, SORT_DESC, $keys, SORT_STRING,
SORT_ASC);
}
echo '<B>'.number_format((getmicrotime() - $t_ON),3,',','.').' ms</B> - ';
print_r($AA);
print_r($keys);
print_r($hits);
?></PRE>


m. b. G. Norbert
_____________________
normal:  02686-987103
Notruf:  0177-2363368
---------------------
e.o.m.


php::bar PHP Wiki   -   Listenarchive