聘我网

新概念招聘3.0

PHP如何按照多维数组中某列进行升/降排序

vote up0vote downstar
$data=array(
    array(
         'name'=>'Alice',
         'key'=>'2fc4ab3d639e5400efdfc73bc27e83f1',
         'age'=>20
    ),

    array(
         'name'=>'Claudia',
         'key'=>'831c2b79c1f19af39c7e3321e11e5f5e',
         'age'=>18
    ),

    array(
         'name'=>'Beatrice',
         'key'=>'6f8512a2066b8f35a27a495ce1228c76',
         'age'=>100
    ),

    array(
         'name'=>'Denise',
         'age'=>25,
         'key'=>'ef6de3b178bf9f69a9fef72e4ee7bbe9'
    ),
);

上面的数组,要按照name或者age进行升/降排序,该如何实现?

 

1 个答复

vote up0vote downcheck

排序多维数组使用usort会很方便:

function sortData($col, $order)
{
    global $data;
    usort($data, 
        function($a, $b) use ($col, $order) 
        {
            if ($a[$col] == $b[$col]) return 0;
            if('asc' == $order)
                return $a[$col] > $b[$col] ? 1 : -1;
            else
                return $a[$col] < $b[$col] ? 1 : -1;
        }
    );
    var_dump($data);
}

sortData('age', 'desc');
var_dump($data);

输出:

array(4) {
  [0]=>
  array(3) {
    ["name"]=>
    string(8) "Beatrice"
    ["key"]=>
    string(32) "6f8512a2066b8f35a27a495ce1228c76"
    ["age"]=>
    int(100)
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(6) "Denise"
    ["age"]=>
    int(25)
    ["key"]=>
    string(32) "ef6de3b178bf9f69a9fef72e4ee7bbe9"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(5) "Alice"
    ["key"]=>
    string(32) "2fc4ab3d639e5400efdfc73bc27e83f1"
    ["age"]=>
    int(20)
  }
  [3]=>
  array(3) {
    ["name"]=>
    string(7) "Claudia"
    ["key"]=>
    string(32) "831c2b79c1f19af39c7e3321e11e5f5e"
    ["age"]=>
    int(18)
  }
}
链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.