Сортировка многомерного массива с несколькими ключами в PHP - PullRequest
0 голосов
/ 24 января 2012

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 24 января 2012

Одним из способов является использование функции usort для создания пользовательской процедуры сортировки. Существует довольно много способов сортировки массивов в 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);
...