$list
: -
$list[$i++] = array(
"date" => $date,
"desc" => $desc,
"priority" => $priority
);
$priority
如果符合某些条件,则设置为TRUE
。
我希望$list
按照顶部优先级为TRUE
的行进行排序。
列表已按日期排序,我希望保留。
答案 0 :(得分:11)
在PHP中> = 5.3
usort ($array, function ($left, $right) {
return $left['priority'] - $right['priority'];
});
或早期版本
function cmp($left, $right) {
return $left['priority'] - $right['priority'];
}
usort($array, 'cmp');
或使用create_function()(也适用于版本< 5.3)
usort ($array, create_function('$left,$right', 'return $left[\'priority\'] - $right[\'priority\'];'));
这很有效,因为(int) true === 1
和(int) false === 0
true - true == 0
true - false == 1
false - true == -1
false - false == 0
答案 1 :(得分:0)
使用usort并提供您自己的排序函数,描述true是大于false还是相反。
function cmp($a, $b)
{
return ($a['priority'] > $b['priority']) ? 1 : -1;
}
usort($array, "cmp");
如果要更改排序的稳定性,如果元素具有相同的优先级值,则对其进行排序,然后只需修改cmp函数。
答案 2 :(得分:0)
使用此功能
function sort2d ($array, $index, $order='asc', $natsort=FALSE, $case_sensitive=FALSE)
{
if(is_array($array) && count($array)>0)
{
foreach(array_keys($array) as $key)
$temp[$key]=$array[$key][$index];
if(!$natsort)
($order=='asc')? asort($temp) : arsort($temp);
else
{
($case_sensitive)? natsort($temp) : natcasesort($temp);
if($order!='asc')
$temp=array_reverse($temp,TRUE);
}
foreach(array_keys($temp) as $key)
(is_numeric($key))? $sorted[]=$array[$key] : $sorted[$key]=$array[$key];
return $sorted;
}
return $array;
}
并致电
sort2d($ list,$ priority);