使用键功能在PHP中对数组进行排序的最佳方法?

时间:2010-09-16 19:49:40

标签: php arrays sorting

usort uasort 使用慢速比较函数,因为每次需要对数组元素进行比较时都必须计算它。其他语言(如Python)允许您使用键函数对数组进行排序,该函数仅对数组中的每个元素进行一次计算。在PHP中执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

你需要更快?使用Quicksort

<?php
function quicksort( $arr, $l = 0 , $r = NULL ) {
// when the call is recursive we need to change
// the array passed to the function earlier
    static $list = array();
    if( $r == NULL )
        $list = $arr;

    if( $r == NULL )
        $r = count($list)-1;//last element of the array

    $i = $l;
    $j = $r;

    $tmp = $list[(int)( ($l+$r)/2 )];

    // partion the array in two parts.
    // left from $tmp are with smaller values,
    // right from $tmp are with bigger ones
    do {
        while( $list[$i] < $tmp )
            $i++;

        while( $tmp < $list[$j] )
            $j--;

        // swap elements from the two sides
        if( $i <= $j ) {
            $w = $list[$i];
            $list[$i] = $list[$j];
            $list[$j] = $w;

            $i++;
            $j--;
        }
    }while( $i <= $j );

    // devide left side if it is longer the 1 element
    if( $l < $j )
        quicksort(NULL, $l, $j);

    // the same with the right side
    if( $i < $r )
        quicksort(NULL, $i, $r);

    // when all partitions have one element
    // the array is sorted

    return $list;
}
?>

答案 1 :(得分:-3)

function sort_with_keyfunc($array, $keyfunc) {
    $keys = array_map($keyfunc, $array); // get the keys for each item
    array_multisort($keys, $array); // sort $array according to the sorted keys
    return $array;
}

这也保持了关联数组中的key =&gt;值对。