通过布尔字段对关联数组进行排序

时间:2011-05-05 12:36:12

标签: php sorting

这样填充了

$list: -

$list[$i++] = array(
    "date" => $date,
    "desc" => $desc,
    "priority" => $priority
);

$priority如果符合某些条件,则设置为TRUE

我希望$list按照顶部优先级为TRUE的行进行排序。

列表已按日期排序,我希望保留。

3 个答案:

答案 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);

Reference