3 回答
TA贡献1155条经验 获得超0个赞
使用 PHP 7 Spaceship Operator <=> 爆炸后使用 usort() 和数组比较:
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'];});
TA贡献1804条经验 获得超2个赞
你可以试试下面的代码
$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);
TA贡献1801条经验 获得超16个赞
您可以对这些值使用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");
- 3 回答
- 0 关注
- 94 浏览
添加回答
举报