PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
KreVeDko
Отправлено: 06 Декабря, 2013 - 22:43:24
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
имеем такой отрезок кода:
PHP:
скопировать код в буфер обмена
...
$Players = $Query->GetPlayers();
...
<?PHP foreach ( $Players as $Player ) : ?>
<tr>
</tr>
<?PHP endforeach ; ?>
<?PHP else : ?>
<tr>
<td>No players in da house</td>
</tr>
<?PHP endif ; ?>
При таком раскладе получаем:
CODE (
htmlphp ):
скопировать код в буфер обмена
PlayerNick1 29 12 : 11
PlayerNick2 37 18 : 15
PlayerNick3 12 11 : 01
PlayerNick4 4 2 : 34
PlayerNick5 10 5 : 24
PlayerNick6 45 24 : 45
Нужно:
CODE (
htmlphp ):
скопировать код в буфер обмена
PlayerNick6 45 24 : 45
PlayerNick2 37 18 : 15
PlayerNick1 29 12 : 11
PlayerNick3 12 11 : 01
PlayerNick5 10 5 : 24
PlayerNick4 4 2 : 34
По возможности надо добавить номер игрока в таблице:
CODE (
htmlphp ):
скопировать код в буфер обмена
#1 PlayerNick6 45 24:45
#2 PlayerNick2 37 18:15
#3 PlayerNick1 29 12:11
#4 PlayerNick3 12 11:01
#5 PlayerNick5 10 5:24
#6 PlayerNick4 4 2:34
нужно отсортировать данные массива по ключу (значению? не шарю в этом) Frags (Frags имеет числовое значение)(Отредактировано автором: 07 Декабря, 2013 - 14:53:07)
KreVeDko
Отправлено: 07 Декабря, 2013 - 01:24:34
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Master_YI пишет: По Frags? А это у вас число?
да
KreVeDko
Отправлено: 07 Декабря, 2013 - 14:12:12
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Master_YI пишет: http://www.php.net/manual/ru/array.sorting.php
уже смотрел, но так и не понял, по этому и обратился сюда.
KreVeDko
Отправлено: 07 Декабря, 2013 - 14:55:00
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Поправил шапку темы.
dXdYdZ пишет: По-моему, лучше сортировать на этапе выборки из БД. (ORDER BY)
Данные получаем с сервера:
PHP:
скопировать код в буфер обмена
define ( 'SQ_SERVER_ADDR' , '193.26.217.19' ) ; define ( 'SQ_SERVER_PORT' , 27777
) ; define ( 'SQ_ENGINE' , SourceQuery
:: GOLDSOURCE ) ; //$Timer0 = MicroTime( true );
$Query = new SourceQuery( ) ;
try
{
$Query -> Connect ( SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE ) ;
//$info = $Query->GetInfo();
//$rules = $Query->GetRules();
//$player = $Query->GetPlayers();
$Players = $Query -> GetPlayers ( ) ;
}
catch( Exception $e )
{
echo $e -> getMessage ( ) ;
}
$Query -> Disconnect ( ) ;
(Отредактировано автором: 07 Декабря, 2013 - 14:55:24)
dXdYdZ
Отправлено: 07 Декабря, 2013 - 15:15:47
Посетитель
Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013
Помог: 11 раз(а)
Ну вот, похоже, где-то в коде getPlayers() содержится сам запрос. Можно переделать эту функцию, чтобы вызывать её так:
Где $sort_id-идентификатор сортировки. Например, 0-frags,1-frags DESC.
Либо перед вызовом функции getPlayers выставлять
(опять таки, идентификатор сортировки)
В любом случае, для этого надо модифицировать класс SourceQuery.(Отредактировано автором: 07 Декабря, 2013 - 15:16:36)
KreVeDko
Отправлено: 07 Декабря, 2013 - 15:31:01
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Возможно будет легче, код функции:
PHP:
скопировать код в буфер обмена
public function GetPlayers( )
{
if ( ! $this -> Connected )
{
return false ;
}
switch ( $this -> GetChallenge ( self :: A2S_PLAYER , self :: S2A_PLAYER ) )
{
case self :: GETCHALLENGE_FAILED :
{
return false ;
}
case self :: GETCHALLENGE_ALL_CLEAR :
{
$this -> Socket -> Write ( self :: A2S_PLAYER , $this -> Challenge ) ;
$this -> Socket -> Read ( ) ;
$Type = $this -> Buffer -> GetByte ( ) ;
if ( $Type == 0 )
{
return false ;
}
else if ( $Type != self :: S2A_PLAYER )
{
throw
new SourceQueryException
( 'GetPlayers: Packet header mismatch. (0x' . DecHex ( $Type ) . ')' ) ; }
break ;
}
}
$Count = $this -> Buffer -> GetByte ( ) ;
while ( $Count -- > 0 && $this -> Buffer -> Remaining ( ) > 0 )
{
$Player [ 'Id' ] = $this -> Buffer -> GetByte ( ) ; // PlayerID, is it just always 0?
$Player [ 'Name' ] = $this -> Buffer -> GetString ( ) ;
$Player [ 'Frags' ] = $this -> Buffer -> GetLong ( ) ;
$Player [ 'Time' ] = ( int) $this -> Buffer -> GetFloat ( ) ;
$Player [ 'TimeF' ] = GMDate ( ( $Player [ 'Time' ] > 3600 ?
"H:i:s" : "i:s" ) , $Player [ 'Time' ] ) ;
$Players [ ] = $Player ;
}
return $Players ;
}
(Отредактировано автором: 07 Декабря, 2013 - 15:34:59)
KreVeDko
Отправлено: 07 Декабря, 2013 - 16:17:38
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
[quote=DelphinPRO][/quote] Спасибо, работает.
Теперь осталось добавить номер каждому игроку в таблице, не подскажите?
CODE (
htmlphp ):
скопировать код в буфер обмена
#1 PlayerNick6 45 24:45
#2 PlayerNick2 37 18:15
#3 PlayerNick1 29 12:11
#4 PlayerNick3 12 11:01
#5 PlayerNick5 10 5:24
#6 PlayerNick4 4 2:34
(Добавление)
Туповатый вопрос, ++$number ... А может быть есть альтернатива?
(Добавление)
DelphinPRO пишет: Перед выводм данных сортируем массив:
Для сортировки в обратную сторону, поменяйте знак "<" на ">" в третьей строчке.
А если у меня выходит несколько одинаковых значений по Frags,
то как пересортировать по TimeF ?
Чтобы было вот так:
DelphinPRO
Отправлено: 07 Декабря, 2013 - 18:09:52
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
PHP:
скопировать код в буфер обмена
if ( $a [ 'Frags' ] == $b [ 'Frags' ] ) {
if ( $a [ 'TimeF' ] == $b [ 'TimeF' ] ) return 0 ;
return ( $a [ 'TimeF' ] < $b [ 'TimeF' ] ) ? - 1 : 1 ;
}
-----Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 07 Декабря, 2013 - 18:13:39
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008
Откуда: Альфа Центавра
Помог: 353 раз(а)
KreVeDko пишет: Как вывести букву А?
DelphinPRO пишет: <?php echo 'А'; ?>
KreVeDko пишет: Спасибо! А как вывести букву Б?
DelphinPRO пишет: <?php echo 'Б'; ?>
KreVeDko
Отправлено: 07 Декабря, 2013 - 18:45:58
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
DelphinPRO пишет: PHP:
скопировать код в буфер обмена
if ( $a [ 'Frags' ] == $b [ 'Frags' ] ) {
if ( $a [ 'TimeF' ] == $b [ 'TimeF' ] ) return 0 ;
return ( $a [ 'TimeF' ] < $b [ 'TimeF' ] ) ? - 1 : 1 ;
}
не получается объединить с кодом выше.
DelphinPRO
Отправлено: 07 Декабря, 2013 - 20:46:00
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
DeepVarvar
-------------------
PHP:
скопировать код в буфер обмена
usort ( $Players , function ( $a , $b ) {
if ( $a [ 'Frags' ] == $b [ 'Frags' ] ) {
if ( $a [ 'TimeF' ] == $b [ 'TimeF' ] ) return 0 ;
return ( $a [ 'TimeF' ] < $b [ 'TimeF' ] ) ? - 1 : 1 ;
}
return ( $a [ 'Frags' ] < $b [ 'Frags' ] ) ? - 1 : 1 ;
} ) ;
-----Чем больше узнаю, тем больше я не знаю.
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB