2015-09-22 3 views
0

у меня есть многомерный массив, который выглядит как:PHP Сортировка многомерных массивов на основе нескольких критериев

$arr=Array 
(
    [0] => Array 
     (
      [0] => TEAM1 
      [1] => 3 
      [2] => 0 
      [3] => 422.47 
      [4] => 192.62 
     ) 

    [1] => Array 
     (
      [0] => TEAM2 
      [1] => 2 
      [2] => 1 
      [3] => 402.14 
      [4] => 210.70 
     ) 

    [2] => Array 
     (
      [0] => TEAM3 
      [1] => 3 
      [2] => 0 
      [3] => 376.79 
      [4] => 174.64 
     ) 
) 

В 5 колонок относятся к Название команды, # победы, # потери, # точек для, # точек против ,

Как бы я сортирую $arr на колонке 1 (# ВИФЯД) (по убыванию), а затем столбец 2 (# Убытки) (по возрастанию), а затем столбец 3 (# оч Для) (по убыванию)

+2

'usort()', и пользовательские функции сравнения ... –

ответ

1

Я нашел решение, которое использует array_multisort()

foreach ($arr as $key => $row) { 
    $wins[$key] = $row[1]; 
    $losses[$key] = $row[2]; 
    $ptsfor[$key] = $row[3]; 
} 
array_multisort($wins, SORT_DESC, $losses, SORT_ASC, $ptsfor, SORT_DESC, $arr); 
0

Вместо этого вы можете просто использовать функцию usort вроде как

usort($arr, function($a,$b){ 
    if($a[1] != $b[1]) 
     return $b[1] - $a[1]; 
    else if($a[2] != $b[2]) 
     return $a[2] - $b[2]; 
    else if($a[3] != $b[3]) 
     return $b[3] - $a[3]; 
}); 

Или вы можете использовать его как в качестве

usort($arr,function($a,$b){ 
    $c = $b[1] - $a[1]; 
    $c .= $a[2] - $b[2]; 
    $c .= $b[3] - $a[3]; 
    return $c; 
}); 
+0

Я думаю, что мой метод использования 'array_multisort()' легче следовать, так как ему ясно показывает 'SORT_DESC' или' SORT_ASC' – Bijan

+0

Зачем использовать цикл и функцию, если это можно сделать легко в рамках одной функции –

0

Вы можете использовать эту функцию

function sort_array($array, $sortkey, $order) 
    { 
     if ($order == "DESC") 
      $or = "arsort"; 
     else 
      $or = "asort"; 
     foreach ($array as $key => $array_row) 
     { 
      $sort_values[$key] = $array_row[$sortkey]; 
     } 
     $or($sort_values); 
     reset($sort_values); 
     while (list ($arr_key, $arr_val) = each($sort_values)) 
     { 
      $sorted_arr[] = $array[$arr_key]; 
     } 
     return $sorted_arr; 
    } 
Смежные вопросы