![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Gold Dragon |
|
||||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Есть массив с данными
и имеется массив в котором перечислены ключи в том порядке в котором нужно отсортировать массив с данными
Оставшиеся данные просто добавляются в конец.. Т.е. должно получится следующее
На ум приходит только следующий механизм: - Прогоняем второй массив циклом - При нахождении в первом массиве совпадение добавляем пару ключ-значение в новый массив, при этом удаляем эту пару из первого массива - После прогона добавляем к новому массиву остаток от первого - Удаляем первый массив. Есть какие-нибудь мысли по этому поводу? -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
Есть. Ничего добавлять/удалять не надо, надо просто отсортировать первый массив с использованием пользовательской функции, которая будет консультироваться у второго массива.
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
baldina, да что-то никак не могу сообразить как всё это с организовать...
Сейчас делаю вот так
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Evghenusi |
|
|||
![]() майский жук ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 3.8.2006 Где: Молдова, Кишинёв Репутация: 6 Всего: 15 |
||||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Evghenusi, ты прав, тоже самое.. и если я правильно понял, то мой вариант наилучшее решение на сегодня. И понятнее и быстрее скорее всего (хотя как проверить не знаю пока)
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
Добавлено через 1 минуту и 30 секунд для старых версий пхп
|
||||
|
|||||
| Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
так.. привожу результаты теста...
Первый массив содержал 1000 записей по типу
Второй массив имел обратную сортировку
В тестах использовал свой код и код приведённый baldina Память оба кода используют одинаково, у меня получилось 0,18Мб. А вот скорость ОГОГО какая разница.. Мой код в среднем показал результат 0,004 Код baldina показал 2,055 То есть мой код получился более чем в 500 раз быстрее Добавлено @ 15:50 Извиняюсь за неточность... Код для "старых версий" показал в среднем 2,055 А вот для новых версий значительно лучше - 0,545, т.е. всего в 136 раз медленнее Это сообщение отредактировал(а) Gold Dragon - 18.7.2012, 15:51 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
неудивительно, т.к. сортировка nlog(n), а алгоритм Gold Dragon линейный. плюс array_search имеет линейную производительность, итого n^2*log(n) vs n
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Что-то не предусмотрели подобный вариант разработчики PHP, а то что предусмотрели, работает на удивление очень медленно
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
массивы php - хеш таблицы, это единственный вид контейнера (который может притворяться и массивом и списком) отсюда все плюсы и минусы. так что имеет смысл посмотреть в сторону spl, где нативно реализованы некоторые основные структуры данных. с 5.3 spl - неотъемлемая часть php, поэтому можно считать, что array() не единственная структура.
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |