按子值排序php多维数组

32
我有这个数组。
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
            )


    )

现在我想按[mid]对这个数组进行排序,我该如何做?

目前我是在foreach循环中排序的,肯定有更好的方式。

编辑

我希望输出像这样的东西:

[mid] key => array value

谢谢

3个回答

55
您可以使用usort函数。
function cmp($a, $b) {
        return $a["mid"] - $b["mid"];
}
usort($arr, "cmp");

查看它


是的,但我发现这些例子有点难以理解。 - Mr Hyde
@RisingSum:我已经更新了我的答案,并提供了一个可用的链接。 - codaddict
17
自2013年(PHP 5+)起,我们可以在usort函数中嵌套另一个函数,如下所示:usort($arr, function($a, $b) { return $a["mid"] - $b["mid"]; }); - caiosm1005
1
这是来自archive.org的“查看”链接: https://web.archive.org/web/20130429091044/http://ideone.com:80/cW5xZ - vr_driver

35

另一个解决方案是使用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);
?>

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;'));

当然,如果您不介意的话,可以适当声明比较函数:
function compareMid($a, $b)
{
    if ($a['mid'] == $b['mid']) {
        return 0;
    }
    return ($a['mid'] < $b['mid']) ? -1 : 1;
}

然后像这样使用:

usort($array, 'compareMid');

所有的内容都在文档中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接