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))