Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Прошу помочь с сортировкой массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не корректно выводится сортировка массива. не могу разобраться почему
Eteterlev
Отправлено: 10 Декабря, 2016 - 16:52:37
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Создана турнирная таблица, Сортировка команд идет по набранным очкам, при набраных очках 0-9 сортировка идет в нормальном режиме: 1 место - 9 очков, 8, 7 и т.д. НО если у команды, 10, 11 и более очков, то рейтинг меняется, на (по очкам) 9, 8, ..., 2, 1, 11!, то есть команда с первого места улетает на 11.
Собственно часть кода:

$point_tables = array();

$pt_key = 0;

foreach ($teams as $id => $team) {
$team_info = $model->getTeamInfoById($teams[$id]);
$team_title = $team_info->title;
$team_logo = $team_info->logo; // название команды и логотипы

$point_tables[$pt_key] = array(
'team_name' => $team_title,
'team_logo' => $team_logo,
'plays' => $playeds[$id],
'wons' => $wons[$id],
'draws' => $draws[$id],
'losts' => $losts[$id],
'gforwards' => $gforwards[$id],
'gagainsts' => $gagainsts[$id],
'avgs' => $avgs[$id],
'ptss' => $ptss[$id],); // часть турнирной таблицы: "Очки"
$pt_key ++;
}

$this->sgroup->point_tables = $model->msort($point_tables, array("ptss"));

Запустил:
echo "\$ptss==$ptss; тип: " . gettype ($ptss[$id]) . "<br />\n";

Результат:
$ptss==Array; тип: string

** понимаю, что идет некорректное сравнение, в ручном режиме если ввожу разные очки могу получить такую сортировку: 99, 9, 8, 7, 6 , 15, 14, 13, 10, 1, по моим ощущениям сравнивается только первая цифра, вторая только во вторую очередь, как если бы было : 9.9, 9, 8, 7, 6 , 1.5, 1.4, 1.3, 1.0, 1

Сломал мозг в конец.

Работа сайта: http://izhhockey[dot]ru
http://izhhockey[dot]ru/index.php/re[dot][dot][dot]ejting-2016-2017
 
 Top
Quest
Отправлено: 10 Декабря, 2016 - 17:48:44
Post Id



Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $point_tables = [];
  2. $i = 1;
  3. $teams = array_fill(0, 12, 'LOL');
  4.  
  5. foreach ($teams as $val) {
  6.     $point_tables[] = [
  7.         'team_name' => $val,
  8.         'team_logo' => $val,
  9.         'plays' => $val,
  10.         'wons' => $val,
  11.         'draws' => $val,
  12.         'losts' => $val,
  13.         'gforwards' => $val,
  14.         'gagainsts' => $val,
  15.         'avgs' => $val,
  16.         'ptss' => $i++,
  17.     ];
  18. }
  19.  
  20. function table_sort_desc($item1, $item2)
  21. {
  22.     if ($item1['ptss'] == $item2['ptss']) {
  23.         return 0;
  24.     } else {
  25.         return $item1['ptss'] < $item2['ptss'] ? 1 : -1;
  26.     }
  27. }
  28. usort($point_tables, 'table_sort_desc');
  29.  
  30. print_r($point_tables);

(Отредактировано автором: 12 Декабря, 2016 - 09:19:12)

 
 Top
Eteterlev
Отправлено: 10 Декабря, 2016 - 20:42:44
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Огромное СПАСИБО, хоть и не помогло! НО за 30 минут я нашел ошибку! и все работает Радость Радость Радость

Подсказка правильная и по делу, а ошибка вот:

$this->sgroup->point_tables = $model->msort($point_tables, array("ptss"));

изменил msort($point_tables, 'ptss');

Все работает как часы!!!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB