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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка многомерного массива по ключу 
:(
    Опции темы
Black
  Дата 11.1.2005, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Код:
===========================
Код

// выборка из базы данных
if (!$Status = mysql_query ("SELECT 6pay3ep, version, COUNT(6pay3ep) FROM StatisticUsers WHERE Login='$login' GROUP BY 6pay3ep;")) { echo "Error"; exit; }
   // пробегаем по всем строкам результата
   while($Infa = mysql_fetch_row ($Status))
   {
   // формируем массивы данных
   $Massiv[]= array("name"=>$Infa[0],"ver"=>$Infa[1],"xost"=>$Infa[2]);
   }

============================
Задача: сделать сортировку массива $Massiv[] по ключу "xost" в порядке убывания чисел (примечание: переменная $Infa[2] всегда положительное число).

Надо это для того, чтобы расположить информацию о популярности браузеров среди пользователей сайта в порядке убывания.
Например:
=====================================
Цитата
Браузер [ver]:  Хосты: 
-------------------------------------
MSIE [6.0]    || 23134 ||
MSIE [5.5]    || 13134 ||
MSIE [5.0]    || 3134  ||
Mozilla [1.5] || 1134  || 

=====================================

Я лично не знаю функции, которая может сортировать многомерный массив по определенному ключу. Что можете предложить сделать???

Как видите надо сортировать по COUNT(6pay3ep), которое формирует база MySQL, кстати может можно отсортировать по COUNT при помощи MySQL не прибегая к помощи PHP???

Это сообщение отредактировал(а) PHP-DIRECTOR - 11.1.2005, 17:48


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
penizillin
Дата 11.1.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



даже не "можно", а "нужно".
а GROUP не сортирует, для этого ORDER нужен.
PM MAIL ICQ   Вверх
Black
Дата 11.1.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Придумал два решения проблемы:
1) изменить запрос к БД:

Цитата
SELECT 6pay3ep, version, COUNT(*) as cool FROM StatisticUsers WHERE Login='$login' GROUP BY 6pay3ep ORDER BY cool desc;


2) Извратиться на PHP

Код

// сортируем массив в порядке убывания
for ($i=0; $i<count($Massiv); $i++)
{
$Arr[$i] = $Massiv[$i]['xost'];
arsort($Arr);
}

// выводим в браузер информацию о браузерах в порядке убывания
foreach($Arr as $k=>$v)
{
echo"<b>{$Massiv[$k]['name']} {$Massiv[$k]['ver']}</b> => хостов: <b>{$Massiv[$k]['xost']}</b><br>";
}


Вот smile

Это сообщение отредактировал(а) PHP-DIRECTOR - 11.1.2005, 18:40


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
penizillin
Дата 11.1.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не надо извращаться, для сортировки можно использовать array_multisort().
но зачем, если этого можно достигнуть еще на стадии запроса...
PM MAIL ICQ   Вверх
Black
Дата 11.1.2005, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



penizillin
приведите, пожалуйста, пример работы функции array_multisort(), в мануале читал не понял как она работает :-) и пример, если можно не из мануала.. там непонятно.


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Mal Hack
Дата 11.1.2005, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



PHP-DIRECTOR
Зачем тебе array_multisort()?
Ты прекрасно получаешь результат запросом.
array_multisort(), это если мне не изменяет память обычная сортировка с помощью for'а, только на уровне языка...
Но опять же. Это будет долго (ну относително времни скрипта).
Работай с результатами запроса GROUP BY .. ORDER BY.
Проще, в любом случае быстрее.
PM ICQ   Вверх
Opik
Дата 12.1.2005, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Попробуй так:
Код
$Status = mysql_query ("SELECT 6pay3ep, version, COUNT(6pay3ep) as  count FROM StatisticUsers WHERE Login='$login' GROUP BY 6pay3ep order by count") or die(mysql_error());


PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1309 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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