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

基于不同格式数字的多维数组排序

基于不同格式数字的多维数组排序

PHP
浮云间 2022-06-17 10:23:55
Array(    [0] => Array        (            [hashtag] => a7e87329b5eab8578f4f1098a152d6f4            [title] => Flower            [order] => 3-1-9        )    [1] => Array        (            [hashtag] => b24ce0cd392a5b0b8dedc66c25213594            [title] => Free            [order] => 2-7-5        )    [2] => Array        (            [hashtag] => e7d31fc0602fb2ede144d18cdffd816b            [title] => Ready            [order] => 2-6-3        )    [3] => Array        (            [hashtag] => e7d31fc0602fb2ede144d18cdffd816b            [title] => Ready            [order] => 3-6-3        ))我需要根据“顺序”按降序排序
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

使用 PHP 7 Spaceship Operator <=> 爆炸后使用 usort() 和数组比较:


usort($multi, function($a,$b){

  return explode("-",$b['order']) <=> explode("-",$a['order']);

});

如果 order 始终具有固定格式,例如 3-1-9(而不是 31-4-345),则可以省略 explode:


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


查看完整回答
反对 回复 2022-06-17
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

你可以试试下面的代码


$multi  = array(

            array(

                    'hashtag'=>'a7e87329b5eab8578f4f1098a152d6f4',

                    'title'=>'Flower',

                    'order'=>'3-1-9'

                ),

            array(

                    'hashtag'=>'b24ce0cd392a5b0b8dedc66c25213594',

                    'title'=>'Free',

                    'order'=>'2-7-5'

                ),

            array(

                    'hashtag'=>'e7d31fc0602fb2ede144d18cdffd816b',

                    'title'=>'Ready',

                    'order'=>'2-6-3'

                ),

            array(

                    'hashtag'=>'e7d31fc0602fb2ede144d18cdffd816b',

                    'title'=>'Ready',

                    'order'=>'3-6-3'

                ),

        );


function sortByOrder($a, $b) {  

    return str_replace("-","", $a['order']) -  str_replace("-","",$b['order']);

    //For decending use the below code

    //return str_replace("-","", $b['order']) -  str_replace("-","",$a['order']);

}

usort($multi, 'sortByOrder');           

echo '<pre>';

print_r($multi);


查看完整回答
反对 回复 2022-06-17
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您可以对这些值使用explode function,作为分隔符传递-,因此您将从array破折号分隔的数字中获得一个数字字符串。在进行比较之前将数字字符串转换为数字,然后对其进行排序,例如:


function cmp($a, $b) {

    $aArray = explode("-", $a["order"]);

    $bArray = explode("-", $b["order"]);

    for ($index = 0; $index < min([count[$aArray], count[$bArray]]); $index++) {

        $intA = (int)$aArray[$index];

        $intB = (int)$bArray[$index];

        if ($intA !== $intB) return (($intA < $intB) ? 1 : -1); //Descending

    }

    if (count($aArray) === count($bArray)) return 0;

    return ((count($aArray) < count($bArray)) ? 1 : -1); //Descending

}

然后使用这个:


usort($yourArray, "cmp");


查看完整回答
反对 回复 2022-06-17
  • 3 回答
  • 0 关注
  • 94 浏览

添加回答

举报

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