-1

I've an array of arrays.

$array = array(
    ['mb_id':'chris','mb_lv':1,'mb_point':150],
    ['mb_id':'chrit','mb_lv':1,'mb_point':160],
    ['mb_id':'chras','mb_lv':3,'mb_point':170],
    ['mb_id':'chrus','mb_lv':1,'mb_point':180]
)

How can I sort the value by mb_lv asc, mb_point asc, mb_id asc? I tried array_multisort(), but I ended up getting mixed up data.

oshell
  • 7,509
  • 1
  • 24
  • 42
Jaon Kim
  • 1
  • 2
  • 3
    Possible duplicate of [How can I sort arrays and data in PHP?](http://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php) – Tobias Feb 14 '17 at 15:18

2 Answers2

0

Give it a try,

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}


$sorted = array_orderby($array, 'mb_lv', SORT_DESC, 'mb_point', SORT_ASC,'mb_id',SORT_ASC);

Give it a try, it should work.

Here is working code link

Rahul
  • 17,231
  • 7
  • 35
  • 54
0
$array = [
    ['mb_id' => 'chris','mb_lv' => 1,'mb_point' => 150],
    ['mb_id' => 'chrit','mb_lv' => 1,'mb_point' => 160],
    ['mb_id' => 'chras','mb_lv' => 3,'mb_point' => 170],
    ['mb_id' => 'chrus','mb_lv' => 1,'mb_point' => 180]
];

usort($array, function ($a, $b){
   return ($a['mb_lv'] < $b['mb_lv']) ? -1 : 1;
});

var_dump($array);

Sandip Patel
  • 166
  • 5