首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于不同格式的数字的多维数组排序

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

Stack Overflow用户
提问于 2019-12-13 19:07:53
回答 3查看 63关注 0票数 1
代码语言:javascript
复制
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
        )
)

我需要基于' order‘的降序排序

EN

回答 3

Stack Overflow用户

发布于 2019-12-13 19:21:12

你能试试下面的代码吗?

代码语言:javascript
复制
$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);

Demo

票数 0
EN

Stack Overflow用户

发布于 2019-12-13 19:47:23

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

代码语言:javascript
复制
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
}

然后使用这个:

代码语言:javascript
复制
usort($yourArray, "cmp");
票数 0
EN

Stack Overflow用户

发布于 2019-12-13 22:17:41

使用usort ()和使用PHP7太空飞船操作符<=>分解后的数组比较:

代码语言:javascript
复制
usort($multi, function($a,$b){
  return explode("-",$b['order']) <=> explode("-",$a['order']);
});

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

代码语言:javascript
复制
usort($multi, function($a,$b){return $b['order'] <=> $a['order'];});   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59321334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档