【问题标题】:Sort alphabetically multi dimensional array by a sub value按子值按字母顺序对多维数组进行排序
【发布时间】:2013-07-25 02:47:12
【问题描述】:
$arr=array(
    [0]=>array(
        [username]=>bsmith
        [name]=>Bob Smith
    )
    [1]=>array(
        [username]=>mjohnson
        [name]=>Mike Johnson
    )
    [2]=>array(
        [username]=>ameyer
        [name]=>Meyer Adam
    )
)

需要按数组的特定子值自然(按字母顺序)排序。

如果按“用户名”排序 => => ameyer, bsmith, mjohnson

$arr=array(
    [0]=>array(
        [username]=>ameyer
        [name]=>Meyer Adam
    )
    [1]=>array(
        [username]=>bsmith
        [name]=>Bob Smith
    )
    [2]=>array(
        [username]=>mjohnson
        [name]=>Mike Johnson
    )

)

如果按“名称”排序 => bsmith, ameyer, mjohnson

$arr=array(
    [0]=>array(
        [username]=>bsmith
        [name]=>Bob Smith
    )
    [1]=>array(
        [username]=>ameyer
        [name]=>Meyer Adam
    )
    [2]=>array(
        [username]=>mjohnson
        [name]=>Mike Johnson
    )
)

最优雅的方法是什么?

我应该使用 uasort 吗?

【问题讨论】:

标签: php


【解决方案1】:

您将需要使用usort,这将是最简单和最快的方法。您可以只使用strcmp 的结果代码来确定alpha 排序顺序。

function sortByUsername($a, $b) {
  return strcmp($a['username'], $b['username']);
}

usort($arr, sortByUsername);

【讨论】:

  • uasort 是如何工作的?在这种特殊情况下,$a 和 $b 是什么?
  • uasort 调用 sortByUsername 与两个元素进行比较。也就是说,我更喜欢 JimiDini 的解决方案,它更灵活。
  • 不需要使用uasort。 usort 就足够了,因为顶级数组不是关联的。另请参阅我对通用解决方案的回答
  • @ihtus php 引擎将从您的数组中发送成对的各种元素,直到它获得足够的证据来说明排序数组的外观
  • 所以它第一次发送对 0 和 1;然后是 1 广告 2?
【解决方案2】:
$sorter = function($key) {
    return function($data, $data2) use ($key) {
        return strcmp($data[$key], $data2[$key]);
    };
};

usort($arr, $sorter('username'));
var_dump($arr);

usort($arr, $sorter('name'));
var_dump($arr);

【讨论】:

    【解决方案3】:

    你可以使用array_multisort:

    foreach ($arr as $array) {
        $names[] = $array['name'];
    }
    
    array_multisort($names,SORT_STRING,$arr);
    print_r($arr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 2011-10-31
      相关资源
      最近更新 更多