#php #sorting #multidimensional-array
#php #сортировка #многомерный-массив
Вопрос:
Я пытаюсь выяснить, как отсортировать массив по значению последнего ключа, когда количество ключей неизвестно?
Итак, если у меня есть массивы, которые выглядят следующим образом:
Array(
[0] => Array(
[0] => Bob
[1] => A
[2] => Parker
)
[1] => Array(
[0] => John
[1] => Smith-Doe
)
[2] => Array(
[0] => Giuseppe
[1] => Gonzalez
[2] => Octavio
[3] => Hernandez
)
)
Я хочу отсортировать его по последнему значению в массиве:
- Джузеппе Гонсалес Октавио Эрнандес
- Боб А. Паркер
- Джон Смит-Доу
Ответ №1:
$arr = array(
array('Bob', 'A', 'Parker'),
array('John', 'Smith-Doe'),
array('Giuseppe', 'Gonzalez', 'Octavio', 'Hernandez')
);
usort($arr, 'sort_by_last_item');
var_dump($arr);
function sort_by_last_item($a, $b)
{
return end($a) > end($b);
}
или если вы используете php 5.3:
$arr = array(
array('Bob', 'A', 'Parker'),
array('John', 'Smith-Doe'),
array('Giuseppe', 'Gonzalez', 'Octavio', 'Hernandez')
);
usort($arr, function($a, $b) { return end($a) > end($b); });
var_dump($arr);
Комментарии:
1. 1 за хороший ответ (и если бы я мог второй раз для лямбда-выражения)
Ответ №2:
$data = array( /* your data */ );
$output = array();
foreach ( $data as $v ) {
$output[ end($v) ] = $v;
}
ksort($output);
var_dump($output);
в качестве альтернативы:
$data = array( /* your data */ );
$output = array();
foreach ( $data as $v ) {
$key = implode(' ', array_reverse($v));
$output[ $key ] = $v;
}
ksort($output);
var_dump($output);
Второй метод позволяет вам иметь много записей с одним и тем же последним элементом и сортировать по последним элементам, а если они равны — сортировать по предпоследнему и так далее…
Ответ №3:
Это работает:
function array_last_item_sort($array){
$return = array();
$sort = array();
foreach($array as $i => $item){
$sort[$i] = $item[count($item) - 1];
}
asort($sort);
foreach($sort as $i => $value){
$return[] = $array[$i];
}
return $return;
}