2011-05-05 232 views
2

$list排序关联数组正是如此填充: - 如果它匹配的一些标准由布尔字段

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

$priority设为TRUE

我想$list排序与行顶部优先TRUE行。

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

+0

确定,所以做到这一点。 'usort'采用自定义排序功能,文档解释了如何使用它。你还没有指定一个问题。 – 2011-05-05 12:39:29

回答

9

在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 
0

使用usort并提供您自己的排序功能,描述true是否大于false,或者是否为其他方式。

function cmp($a, $b) 
{ 
    return ($a['priority'] > $b['priority']) ? 1 : -1; 
} 

usort($array, "cmp");
如果要更改排序,如果它们具有相同的优先级值,其中的元素进行排序的稳定性

,则只需修改CMP功能。

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($列表中,$优先);

Reference