【问题标题】:How do I order an array that contains arrays? [duplicate]如何订购包含数组的数组? [复制]
【发布时间】:2011-08-31 00:29:55
【问题描述】:

可能重复:
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

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

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

【问题讨论】:

  • 那么我们是按照关注者排序的吗?
  • 是的,纯粹是追随者:)。

标签: php arrays sorting


【解决方案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

【讨论】:

  • 请注意,我的这个答案的初稿将其倒退并按升序排序。如果您正在寻找降序,请使用新的 sn-p。 (唯一的区别是我把函数中的<换成了>。)
  • 谢谢,特别是解释!!所以我认为它会逐渐过滤比较每个数组(我不太确定$a$b 代表什么)?
【解决方案2】:

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

在此之后,结果按关注者降序排列,如果关注者相同,则按名称升序排列(即字母顺序)。

【讨论】:

    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 2011-06-10
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多