сортировка ассоциативного массива по логическому полю - PullRequest
3 голосов
/ 05 мая 2011

$list заполняется следующим образом: -

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

$priority устанавливается на TRUE, если это соответствует некоторым критериям.

Я бы хотел, чтобы $listсортироваться по строкам с приоритетом TRUE вверху.

Список уже отсортирован по дате, которую я хочу сохранить.

Ответы [ 3 ]

11 голосов
/ 05 мая 2011

В 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) </p>

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 голосов
/ 05 мая 2011

используйте эту функцию

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

Ссылка

0 голосов
/ 05 мая 2011

Используйте usort и укажите собственную функцию сортировки, описывающую, больше ли true, чем false, или наоборот.

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

usort($array, "cmp");

если вы хотите изменить стабильность сортировки, где элементы сортируются, если они имеют одинаковое значение приоритета, просто измените функцию cmp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...