Задался тут вопросом как сортировать в PHP массивы по нескольким ключам, поискал (не сильно долго в инете) ничего не нашел, а потому придумал свой вариант.
Все очень просто, и делается за три прохода:
1. Пробегаете ваш массив и одновременно создаете новый (tmp), где ключ - ключ в исходном массиве, а значение склейка ключей. Например для строковых $a.'-'.$b.'-'.$c, а для числовых можно воспользоваться умножением.
2. Сортируете полученный массив sort или rsort
3. Создаете новый массив пробегая по отсортированному tmp, создавая массив по заданному значению из tmp и значению из исходного массива.
Это возможно лишь потому, что PHP при создании нового элемента массива элемент точно добавляется в конец, в Perl это бы не прокатило. Там он бы попал по хешу для сортировки. Да и сортировать в Perl'е гораздо легче, следует лишь указать любую пользовательскую функцию перед sort. Да и Perl круче PHP, но пост совсем не про это....
Все очень просто, и делается за три прохода:
1. Пробегаете ваш массив и одновременно создаете новый (tmp), где ключ - ключ в исходном массиве, а значение склейка ключей. Например для строковых $a.'-'.$b.'-'.$c, а для числовых можно воспользоваться умножением.
2. Сортируете полученный массив sort или rsort
3. Создаете новый массив пробегая по отсортированному tmp, создавая массив по заданному значению из tmp и значению из исходного массива.
Это возможно лишь потому, что PHP при создании нового элемента массива элемент точно добавляется в конец, в Perl это бы не прокатило. Там он бы попал по хешу для сортировки. Да и сортировать в Perl'е гораздо легче, следует лишь указать любую пользовательскую функцию перед sort. Да и Perl круче PHP, но пост совсем не про это....
php.net/manual/ru/function.usort.php
ОтветитьУдалитьСпасибо, не знал :)
ОтветитьУдалить