У меня проблема с PHP usort()
.Предположим, у меня есть такой массив (это упрощение, я не работаю с именами, у меня есть массив объектов, а не массивов):
$data = array(
array('name' => 'Albert', 'last' => 'Einstein'),
array('name' => 'Lieserl', 'last' => 'Einstein'),
array('name' => 'Alan', 'last' => 'Turing' ),
array('name' => 'Mileva', 'last' => 'Einstein'),
array('name' => 'Hans Albert', 'last' => 'Einstein')
);
Как видите, массивсортируется произвольно.
Теперь, если хотите отсортировать по last
, я делаю:
function sort_some_people($a, $b) { return strcmp($a['last'], $b['last']); }
usort($data, 'sort_some_people');
И у меня есть:
Array (
[0] => Array ( [name] => Mileva [last] => Einstein )
[3] => Array ( [name] => Albert [last] => Einstein )
[1] => Array ( [name] => Lieserl [last] => Einstein )
[2] => Array ( [name] => Hans Albert [last] => Einstein )
[4] => Array ( [name] => Alan [last] => Turing )
)
Это нормально, теперь они отсортированы по last
.Но, как видите, я только что полностью потерял предыдущую сортировку.Что я говорю?Я хочу сохранить сортировку массива, как это было раньше, но в качестве вторичной сортировки.Надеюсь, мне было ясно. Практически Я хочу отсортировать данные, используя что-то вроде usort()
(то есть полностью настраиваемая сортировка), но если поле сортировки между двумя элементами одинаково, я хочу сохранить их относительное положение как было раньше.Учитывая приведенный пример, я хочу, чтобы Lieserl Einstein
появлялся до Mileva Einstein
, потому что это было так в начале.