2014-04-04 9 views
2

У меня есть массив, который выглядит примерно так:Как отсортировать массив по булевым значениям

array(
    array('foo' => true), 
    array('foo' => false), 
    array('foo' => true), 
    array('foo' => true), 
    array('foo' => false) 
) 

есть простой способ объединить все массивы, где foo == true к вершине?

+0

http://www.php.net/manual/en/function.uasort.php может быть дроидом, которого вы ищете – RobP

ответ

5

Просто используйте функцию uasort(), чтобы заказать массив:

$arr = array(
    array('foo' => true), 
    array('foo' => false), 
    array('foo' => true), 
    array('foo' => true), 
    array('foo' => false) 
); 

function sortit($a, $b) { 
    if($a['foo'] === $b['foo']) { 
     return 0; 
    } 

    return $a['foo'] > $b['foo'] ? -1 : 1; 
} 

uasort($arr, 'sortit'); 
+0

Казалось, что сработал, изменив '<' to '>' –

0

rsort() будет на самом деле сделать это для вас:

<?php 

$a = array(
    array('foo' => true), 
    array('foo' => false), 
    array('foo' => true), 
    array('foo' => true), 
    array('foo' => false) 
); 

rsort($a); 

var_dump($a); 

Урожайность:

array (size=5) 
    0 => 
    array (size=1) 
     'foo' => boolean true 
    1 => 
    array (size=1) 
     'foo' => boolean true 
    2 => 
    array (size=1) 
     'foo' => boolean true 
    3 => 
    array (size=1) 
     'foo' => boolean false 
    4 => 
    array (size=1) 
     'foo' => boolean false 

Пример: https://eval.in/131577

Надеюсь, это поможет!

Смежные вопросы