如何订购包含数组的数组?

时间:2011-08-31 00:29:55

标签: php arrays sorting

  

可能重复:
  Sort an array by a child array's value in PHP

我有以下数组结构:

$en_array = array();

while(...) {
    $en_array[] = $row;
}

$en_array = array (
    array (
        "name" => "a",
        "followers" => 5,
        "imageurl" => "http://images.com/img.jpg"
    )

    array (
        "name" => "b",
        "followers" => 25,
        "imageurl" => "http://images.com/img.jpg"
    )

    array (
        "name" => "c",
        "followers" => 15,
        "imageurl" => "http://images.com/img.jpg"
    )

)

在这个例子中,我想通过关注者的值来排序en数组的键,例如: $en_array[0]["followers"]的值为25

我不完全确定是否可以这样做,但我希望可以。

任何帮助将不胜感激:)!!

2 个答案:

答案 0 :(得分:1)

由于您似乎对追随者排序感兴趣,因此我们可以使用PHP的usort轻松完成此操作。

function compare_by_followers($a, $b) {
    if($a['followers'] == $b['followers']) return 0;
    return $a['followers'] > $b['followers'] ? -1 : 1;
}

usort($en_array, 'compare_by_followers');

排序的核心是将阵列元素相互比较并确定哪些元素大于其他元素的过程。 usort允许您为此过程使用自定义比较函数:compare_by_followers($a, $b)如果-1大于$a['followers']则返回$b['followers'](意味着$a应该在$b之前去,如果1小于$a['followers'](意味着$b['followers']应该在$a之后),则返回$b,并返回0如果他们是平等的。

答案 1 :(得分:0)

array_multisort()就是你的目标。

foreach ($en_array as $key => $row) {
    $name[$key] = $row['name'];
    $followers[$key] = $row['followers'];
}

array_multisort($followers,SORT_DESC,$name,SORT_ASC,$en_array);

在此之后,结果按照追随者的降序排列,并且追随者是相同的,名称的升序(即字母顺序)。