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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли альтернатива array_multisort? array_multisort "ест" цифровые ключи 
:(
    Опции темы
teroni
Дата 7.6.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

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



Столкнулся с такой проблемкой...
Имеется вот такой массивчик:
Код

$user['posts']['admin'] = 30;
$user['posts'][111] = 40;
$user['posts']['Boy'] = 40;
$user['reputation']['admin'] = 100;
$user['reputation'][111] = 10;
$user['reputation']['Boy'] = 1;

На самом деле он конечно гораздо больше...
Сортирую массив по количеству сообщений:
Код

arsort ($user['posts']);
print_r($user['posts']);

На выходе вижу: Array ( [Boy] => 40 [111] => 40 [admin] => 30 )
Сортирую с учетом репутации:
Код

array_multisort($user['posts'], SORT_NUMERIC, SORT_DESC, $user['reputation'], SORT_NUMERIC, SORT_DESC);
echo "<pre>";
print_r($user);
echo "</pre>";

На выходе вижу: 
Код

Array
(
    [posts] => Array
        (
            [0] => 40
            [Boy] => 40
            [admin] => 30
        )

    [reputation] => Array
        (
            [0] => 10
            [Boy] => 1
            [admin] => 100
        )
)

На самом деле, таблица побольше, и сортирую не по двум, а иногда даже по 5 столбцам, но суть вроде бы описал.
Вопрос в том, почему при array_multisort строковые ключи сохраняются, а цифровые - превращаются в 0, 1, 2 и т. д.? И как сделать чтобы такого не было?
PM MAIL   Вверх
teroni
Дата 7.6.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

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



Сейчас проблему решаю добавлением к каждому ключу еще одного символа напр. 111 превращаю в а111, Boy - в аBoy - все работает как надо, но все-таки интересно - как правильно сделать!
PM MAIL   Вверх
WolfON
Дата 7.6.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



SORT_NUMERIC, ага
PM MAIL ICQ   Вверх
SelenIT
Дата 7.6.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



WolfON, к чему это?

teroni, можно изменить структуру хранения данных (имхо, так будет даже логичнее) и воспользоваться ф-цией uasort:
Код

$user = array(
    'admin' => array('posts'=>30, 'reputation' => 100),
    111 => array('posts'=>40, 'reputation' => 10),
    'Boy' => array('posts'=>40, 'reputation' => 1),

);

function cmp($a, $b) {
    if ($a['posts'] == $b['posts']) {
        return ($a['reputation'] > $b['reputation']) ? -1 : 1;
    }
    return ($a['posts'] > $b['posts']) ? -1 : 1;
}

uasort($user, 'cmp');

print_r($user);



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0445 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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