按子值排序php多维数组

Mr *_*yde 30 php arrays

我有这个数组

Array
(
[data] => Array
    (
        [0] => Array
            (

                [id] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006034
                [initial_timestamp] => 1293005125
                [user] => administrator
            )

        [1] => Array
            (

                [mid] => 1293001908
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293001908
                [initial_timestamp] => 1293001908
                [user] => administrator
            )

        [2] => Array
            (

                [mid] => 1293009999
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293009999
                [initial_timestamp] => 1293009999
                [user] => administrator
            )

        [3] => Array
            (

                [mid] => 1293006666
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006666
                [initial_timestamp] => 1293006666
                [user] => administrator
            )

        [4] => Array
            (

                [mid] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006125
                [initial_timestamp] => 1293005125
                [user] => administrator2
            )


    )
Run Code Online (Sandbox Code Playgroud)

现在我想按照[mid] 我如何做这个排序?

目前我在foreach循环中排序这
必须有一个更好的方法

编辑 我希望输出类似的东西

[mid] key => array value

谢谢

cod*_*ict 54

您可以使用usort功能.

function cmp($a, $b) {
        return $a["mid"] - $b["mid"];
}
usort($arr, "cmp");
Run Code Online (Sandbox Code Playgroud)

看见

  • 截至2013年(PHP 5+),我们可以将函数嵌套在`usort`调用中:`usort($ arr,function($ a,$ b){return $ a ["mid"] - $ b [ "mid";});` (16认同)

Muk*_*ain 34

另一个解决方案是使用array_multisort

<?php
// Obtain a list of columns
foreach ($data as $key => $row) {
    $mid[$key]  = $row['mid'];
}

// Sort the data with mid descending
// Add $data as the last parameter, to sort by the common key
array_multisort($mid, SORT_DESC, $data);
?>
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 5

更新

我最近在关于排序多维数组的"权威"主题中以更有能力的方式回答了这个问题.下面的答案针对旧版本的PHP(5.2及更早版本); 虽然这个概念是合理的,但现在有更好的做事方式.请改为阅读其他问题的答案.

原始(非常过时)的答案

usort正是出于这种情况.如果您还需要保留密钥,则适当的功能将是uasort.

例如:

usort($array, create_function('$a, $b',
   'if ($a["mid"] == $b["mid"]) return 0; return ($a["mid"] < $b["mid"]) ? -1 : 1;'));
Run Code Online (Sandbox Code Playgroud)

当然,如果您不介意,可以正确声明比较功能:

function compareMid($a, $b)
{
    if ($a['mid'] == $b['mid']) {
        return 0;
    }
    return ($a['mid'] < $b['mid']) ? -1 : 1;
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

usort($array, 'compareMid');
Run Code Online (Sandbox Code Playgroud)

所有这些都在文档中.