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

自定义数组排序以强制某些值开始或结束数组

自定义数组排序以强制某些值开始或结束数组

PHP
慕的地10843 2021-11-05 14:48:38
说我有一个数组$ar = ['apples','blueberries','end','pears','dragonfruit','oranges','start','durian','lychee','rambutan','pineapple','end','start'];我想要以某种顺序排列的数组(让我们说这个参数的字母顺序),但是数组尾部的值是 'end',而数组的头部是 'start'。function cmp($a,$b) {    if ($a == $b) return 0;    if ($b === 'start') return 1;    if ($b === 'end') return -1;    return ($a < $b) ? -1 : 1;}usort($ar,"cmp");echo implode(", ", $ar);如何排序,以便匹配特定值的值最终位于数组的头部或尾部,但其他值将根据其他条件(例如数字、alpha 等)进行排序
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您可以使用array_diffwith sort,array_push和array_unshift


 $elements = ['start','end'];//start & end elements array

 $rest     = array_diff($ar, $elements);

 sort($rest);//Sorting of the rest items

 array_push($rest, $elements[1]);//Push end element  

 array_unshift($rest, $elements[0]);//Push start element

您可以rsort($rest)用于降序。


现场示例:https : //3v4l.org/GnotC


查看完整回答
反对 回复 2021-11-05
?
FFIVE

TA贡献1797条经验 获得超6个赞

尝试这个


$ar = ['apples','blueberries','end','pears','dragonfruit','oranges','start','durian','lychee','rambutan','pineapple','end','start', 'end', 'banana', 'yellow'];


function cmp($a, $b) {


    if ($a === $b) {

        return 0;

    }


    if ($a === 'start' ||  $b === 'end' ) {

        return -1;

    }


    if( $b === 'start' || $a === 'end') {

        return 1;

    }



    return ($a < $b) ? -1 : 1; }


    usort($ar,"cmp");


    echo implode(', ', $ar);

希望能帮到你


查看完整回答
反对 回复 2021-11-05
?
婷婷同学_

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

以下是您的 cmp 函数应该如何。只介绍了几个 if 语句。


function cmp($a, $b) {


    if ($a === $b) {

        return 0;

    }


    if ($a === 'start' ) {

        return -1;

    }


    if( $b === 'start' ) {

        return 1;

    }


    if ($a === 'end' ) {

        return 1;

    }


    if ($b === 'end' ) {

        return -1;

    }     


    return ($a < $b) ? -1 : 1;

}


查看完整回答
反对 回复 2021-11-05
  • 3 回答
  • 0 关注
  • 103 浏览

添加回答

举报

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