【问题标题】:Sorting an Array by Values in PHP [duplicate]在PHP中按值对数组进行排序[重复]
【发布时间】:2011-12-02 04:40:39
【问题描述】:

可能重复:
Sorting an associative array in PHP

我有一个如下所示的数组。我需要按点值从最高到最低对其进行排序。我已经尝试了所有的排序功能,其中一些带来了疯狂的结果。

(
  [0] => Array
  (
    [name] => Shane Jones
    [points] => 43
  )
  [1] => Array
  (
    [name] => Katie 'Kitty' Youd
    [points] => 50
  )
  [2] => Array
  (
    [name] => Steve Bennett
    [points] => 50
  )
  [3] => Array
  (
    [name] => Sharon Harvey
    [points] => 99
  )
  [4] => Array
  (
    [name] => Sean Dentith
    [points] => 50
  )

)

【问题讨论】:

  • 是的,你的问题出现了,因为它是一个多维数组,数组排序函数只会影响最外面的数组。这个数组是如何创建的?它是硬编码的还是来自数据源,比如数据库或 XML 文件?
  • 一个类似的问题已经提出回答:Sorting an associative array in PHP。下次请使用搜索功能。请参阅FAQ

标签: php arrays


【解决方案1】:

参见array_multisort 的 PHP 手册条目中的示例 #3

<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

// Obtain a list of columns
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>

【讨论】:

  • 太复杂了,USort更合适
  • @MathieuDumoulin 在这种情况下可能有点复杂,但它是一个有效的解决方案,并且更容易构建。
【解决方案2】:

使用usort()

usort($data, function($a, $b) {
    return $a['points'] - $b['points'];
});

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多