按键排序数组

时间:2011-05-18 18:46:28

标签: php

有人能帮帮我吗?我想订购这个多维数组项[] 通过关键'rel'

print_r ($items) will output:



 Array(

 [36] => Array
    (
        [id] => 36
        [name] => mp4
        [total_items] => 58
        [rel] => 5.3015
    )

[61] => Array
    (
        [id] => 61
        [name] => mp3
        [total_items] => 61
        [rel] => 21.7269
    )

[63] => Array
    (
        [id] => 63
        [name] => avi
        [total_items] => 43
        [rel] => 2.254
    )
 )

我需要:先[61]秒[36]然后[63]

谢谢!

4 个答案:

答案 0 :(得分:2)

以下是我使用的内容:

function array_sort(&$array, $on, $order=SORT_ASC)
{
    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
            break;
            case SORT_DESC:
                arsort($sortable_array);
            break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}

所以你会像这样使用它:

array_sort($items, 'rel');

答案 1 :(得分:2)

有一个功能,它被称为uasort

请参阅usort文档中的第一个和第二个示例并对其进行修改,可能是这样的:

function cmp($a, $b)
{
    if ($a['rel'] == $b['rel']) {
        return 0;
    }
    return ($a['rel'] < $b['rel']) ? -1 : 1;
}

uasort($your_array, "cmp");

有帮助吗?

修改

此外,如果您的PHP版本高于5.3,则可以使用closures

uasort($your_array, function($a, $b){
    if ($a['rel'] == $b['rel']) {
        return 0;
    }
    return ($a['rel'] < $b['rel']) ? -1 : 1;
});

<强> EDIT2:

我犯了一个错误:usort()用于排序而不保持关键关联(请参阅more info),uasort()函数就是您所需要的。我已经纠正了上面的例子。

答案 2 :(得分:1)

$rel = array();
foreach ( $items as $key => $value )
{
    $rel[$key] = $value['rel'];
}
array_multisort($rel, SORT_ASC, $items);

答案 3 :(得分:0)