Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пользовательская сортировка массива 
:(
    Опции темы
Megas
Дата 16.1.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Доброе время суток.

Столкнулся со следующей проблемой: имеется некий двумерный массив данных, допустим это массив пользователей:
Код

$data = array(
    array(
        'id' => 50,
        'name' => 'Вася',
        'age' => 20,
        'gender' => 'male',
        /* тут ещё куча полей */
    ),
    array(
        'id' => 60,
        'name' => 'Петя',
        'age' => 20,
        'gender' => 'male',
        /* тут ещё куча полей */

    ),
    /* и так далее */
);


Так вот, необходимо было отсортировать этот массив по некоему значению и выбрать топ10. Для этого был написан следующий код:

Код

function userSorter($a, $b)
{
    return ($a['somefield']>$b['somefield']) ? -1 : 1;
}
uasort($data, 'userSorter');
$data = array_slice($data, 0, 10);


Но обнаружилось, что когда этот массив очень большой, то эта сортировка может занять уйму времени. К примеру, сортировка 100К записей забрала почти 3 часа (128М памяти и ядро сервера загруженное на 95%).

Первое что пришло в голову, это использовать для этого БД. Поэтому новый алгоритм прост: 
- пробегаюсь по массиву
- заношу в табличку индекс текущего элемента и значения того поля, по которому нужно отсортировать
- SELECT index FROM sort_table ORDER BY somefield DESC LIMIT 10;

Работает оно считаные доли секунд. Но только вот (по определенным причинам) не хочется для этого использовать БД. Может кто подскажет, как можно решить эту проблему средствами самого пхп?
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.