2012-01-24 2 views
0

Ну, я пытаюсь сортировать некоторые данные на PHP. Ниже приведен пример массива (первый столбец, представляющий идентификаторы, которые я хочу еще быть связан с их соответствующими значениями в каждой строке):Сортировка многомерного массива с несколькими ключами в PHP

0 1 2,0
-15 20,0
-15 5,5
-15 55,1
4 2 22,3
5 20 70,8
6 2 8,2

Сначала я хотел бы расположить строки в порядке, где значения во втором столбце находятся в порядке убывания:

-20 70,8
-15 20,0
-15 5,5
-15 55,1
4 2 22,3
6 2 8,2
0 1 2,0

Затем, сохраняя тем, со второй колонкой еще в своем расположении каждым набором рядов с одинаковым значением во втором столбце расположить третьи значения в порядке возрастания:

5 20 70,8
-15 5,5
-15 20,0
-15 55,1
6 2 8,2
4 2 22,3
0 1 2,0

Я пробовал некоторые вещи с сортировкой массива функции для PHP, однако я могу Невозможно определить, как выполнять обе эти операции, сохраняя при этом связь строк.

ответ

2

Один из способов - использовать функцию для создания пользовательской процедуры сортировки. Существует довольно много способов сортировки массивов на PHP в зависимости от того, как вы хотите сортировать данные, многомерность, сортировку ключей и т. Д. Этот фрагмент сортируется на основе требований к вводу и выводу, указанных выше.

$vals = array(
    array('id' => 0, 'val1' => 1, 'val2' => 2.0), 
    array('id' => 1, 'val1' => 15, 'val2' => 20.0), 
    array('id' => 2, 'val1' => 15, 'val2' => 5.5), 
    array('id' => 3, 'val1' => 15, 'val2' => 55.1), 
    array('id' => 4, 'val1' => 2, 'val2' => 22.3), 
    array('id' => 5, 'val1' => 20, 'val2' => 70.8), 
    array('id' => 6, 'val1' => 2, 'val2' => 8.2) 
    ); 

usort($vals, 'sortfn'); 

function sortfn($a, $b) 
{ 
    if($a['val1'] == $b['val1']) 
     return ($a['val2'] > $b['val2']); 
    else 
     return ($a['val1'] < $b['val1']); 
} 

var_dump($vals); 
+0

О, спасибо, это было действительно то, что мне нужно! Все еще изучая вопросы сортировки массивов на PHP, поэтому я не смог понять это. – user1165983

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