为了账号安全,请及时绑定邮箱和手机立即绑定

如何按值排序多维数组?

如何按值排序多维数组?

PHP
凤凰求蛊 2019-05-22 14:25:25
如何按值排序多维数组?如何通过“order”键的值对此数组进行排序?尽管这些值目前是顺序的,但它们并不总是如此。Array(     [0] => Array         (             [hashtag] => a7e87329b5eab8578f4f1098a152d6f4            [title] => Flower             [order] => 3         )     [1] => Array         (             [hashtag] => b24ce0cd392a5b0b8dedc66c25213594            [title] => Free             [order] => 2         )     [2] => Array         (             [hashtag] => e7d31fc0602fb2ede144d18cdffd816b            [title] => Ready             [order] => 1         ))
查看完整描述

4 回答

?
慕仙森

TA贡献1827条经验 获得超8个赞

尝试usort,如果你仍然在PHP 5.2或更早版本,你必须先定义一个排序函数:

function sortByOrder($a, $b) {
    return $a['order'] - $b['order'];}usort($myArray, 'sortByOrder');

从PHP 5.3开始,您可以使用匿名函数:

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

最后使用PHP 7,您可以使用太空船运营商

usort($myArray, function($a, $b) {
    return $a['order'] <=> $b['order'];});

要将其扩展到多维排序,如果第一个为零,则引用第二个/第三个排序元素 - 下面将对此进行最佳说明。您还可以使用它来对子元素进行排序。

usort($myArray, function($a, $b) {
    $retval = $a['order'] <=> $b['order'];
    if ($retval == 0) {
        $retval = $a['suborder'] <=> $b['suborder'];
        if ($retval == 0) {
            $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
        }
    }
    return $retval;});

如果需要保留关键关联,请使用uasort()- 请参阅手册中数组排序功能的比较


查看完整回答
反对 回复 2019-05-22
?
12345678_0001

TA贡献1802条经验 获得超5个赞

function aasort (&$array, $key) {

    $sorter=array();

    $ret=array();

    reset($array);

    foreach ($array as $ii => $va) {

        $sorter[$ii]=$va[$key];

    }

    asort($sorter);

    foreach ($sorter as $ii => $va) {

        $ret[$ii]=$array[$ii];

    }

    $array=$ret;

}


aasort($your_array,"order");


查看完整回答
反对 回复 2019-05-22
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我用这个函数:

function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) {
    $sort_col = array();
    foreach ($arr as $key=> $row) {
        $sort_col[$key] = $row[$col];
    }

    array_multisort($sort_col, $dir, $arr);}array_sort_by_column($array, 'order');


查看完整回答
反对 回复 2019-05-22
?
精慕HU

TA贡献1845条经验 获得超8个赞

我通常使用usort,并传递我自己的比较函数。在这种情况下,它非常简单:

function compareOrder($a, $b){
  return $a['order'] - $b['order'];}usort($array, 'compareOrder');


查看完整回答
反对 回复 2019-05-22
  • 4 回答
  • 0 关注
  • 574 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信