Сортировка многомерного массива с помощью array_multisort, где вы не знаете размеры массива - PullRequest
2 голосов
/ 25 мая 2009

У меня есть многомерный массив, который в основном состоит из одного подмассива для каждого года. Так, например, если бы у меня были данные за три года, это могло бы выглядеть так:

$data[0] = Array(0,1,2,3,4,5,6,7);
$data[1] = Array(6,5,4,3,6,7,8,9);
$data[2] = Array(1,4,2,5,7,3,1,4);

Теперь я хочу иметь возможность сортировать эти массивы по одному из лет. Например, я могу захотеть отсортировать по второму году, и в этом случае все они будут отсортированы по переупорядочению $ data [1].

Я могу легко это сделать с помощью array_multisort:

array_multisort($data[1],SORT_ASC,$data[0],$data[2]);

Это хорошо, но я не знаю, сколько будет лет данных. Мне нужен какой-то способ указать только правильное количество аргументов, но я не знаю, как это сделать в php, если только мне не нужно иметь оператор if для каждого возможного числа лет, что кажется невероятно болезненным:

if ($num_years == 1)
{
    array_multisort($data[$which_year],SORT_ASC);
}
else if ($num_years == 2)
{
    array_multisort($data[$which_year],SORT_ASC,$data[0],$data[1]); // this does work, interestingly, in spite of the repetition...
}

Кто-нибудь знает лучший способ?

1 Ответ

5 голосов
/ 25 мая 2009

Вы всегда можете использовать call_user_func_array , указав array_multisort в качестве первого параметра и создав массив параметров для передачи в array_multisort. Что-то вроде:

$params = array();
foreach($data as $year){
  $params[] = $year;
}
call_user_func_array('array_multisort', $params);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...