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‘的降序排序
发布于 2019-12-13 19:21:12
你能试试下面的代码吗?
$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);发布于 2019-12-13 19:47:23
您可以对这些值使用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");发布于 2019-12-13 22:17:41
使用usort ()和使用PHP7太空飞船操作符<=>分解后的数组比较:
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'];}); https://stackoverflow.com/questions/59321334
复制相似问题