Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义数组排序以强制某些值作为数组的开始或结束_Php_Arrays - Fatal编程技术网

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

Php 自定义数组排序以强制某些值作为数组的开始或结束,php,arrays,Php,Arrays,假设我有一个数组 $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;

假设我有一个数组

$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);
函数cmp($a,$b){
如果($a==$b)返回0;
如果($b=='start')返回1;
如果($b=='end')返回-1;
回报率($a<$b)?-1:1;
}
usort($ar,“cmp”);
回波内爆(“,”,$ar);

如何排序,使与特定值匹配的值最终位于数组的开头或结尾,但其他值将基于其他条件(例如数字、字母等)进行排序。只介绍了几个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;
}

函数cmp($a,$b){
如果($a==$b){
返回0;
}
如果($a=='start'){
返回-1;
}
如果($b==‘开始’){
返回1;
}
如果($a=='end'){
返回1;
}
如果($b=='end'){
返回-1;
}     
回报率($a<$b)?-1:1;
}

您可以将
数组_diff
排序
数组_push
数组_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)
进行降序

实例:

试试这个

$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);
$ar=[‘苹果’、‘蓝莓’、‘末端’、‘梨’、‘龙果’、‘橙子’、‘开始’、‘榴莲’、‘荔枝’、‘红毛丹’、‘菠萝’、‘末端’、‘开始’、‘末端’、‘香蕉’、‘黄色’];
功能cmp($a$b){
如果($a==$b){
返回0;
}
如果($a==‘开始’| |$b==‘结束’){
返回-1;
}
如果($b==‘开始’| |$a==‘结束’){
返回1;
}
回报($a<$b)?-1:1;}
usort($ar,“cmp”);
回波内爆(',',$ar);

希望这能帮助你

你已经接近了,现在你也错过了
$a
上的比较,
如果($a==='end'.\124;$b=='start')返回1
并对其执行相反的操作,嗯,除非这改变了数组的长度。有时数组中的重复项是可能且有效的。@frumbert您可以使用
arrau\u unique
,例如
arrau\u unique(array\u diff($ar,$elements))