Вывести серверы и кол-во игроков из одного поля в виде массива - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1

Вывести серверы и кол-во игроков из одного поля в виде массива

#1 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 413
  • Регистрация: 16-Январь 18
  • Репутация: 6
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 04 Декабрь 2018 - 04:07

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

http://prntscr.com/lqcgk5 вот так выглядит поле с текущими игроками, уже есть функция выводящая данные в массив: уже есть функция статистики:

Сейчас массив со статистикой выглядит так:

И так, вывели массив игроков в этой функции: http://prntscr.com/lqcj88 сейчас нужно привести это к виду

[server1] => Игроков
[server2] => Игроков
[server3] => Игроков

С чего начать?

        $cg = new \IPS\Patterns\ActiveRecordIterator(\IPS\Db::i('wc3')->select('*', static::$databaseTable, $where, 'lobby DESC'), '\IPS\wc3\ActiveGames\ActiveGames');
        $lobbies = $games = $players = 0;
        foreach($cg as $g) {
            if($g->getLobby()) {
                $lobbies++;
            } else {
                $games++;
            }

            $players += $g->getSlotstaken();
            $massivPlayers = static::getUsers($g->getUsernames());
        }
        return [
            'lobbies' => $lobbies,
            'games' => $games,
            'players' => $players,
            'massivPlayers' => $massivPlayers
        ];

Сообщение изменено: siv1987 (04 Декабрь 2018 - 21:41)

0

#2 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 591
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 403
  • IPB version:I have no IPB
 

Отправлено 04 Декабрь 2018 - 10:19

Просмотреть сообщениеTemKa_SD сказал(а):

            $massivPlayers = static::getUsers($g->getUsernames());


А чего у Вас тут каждый раз переопределяется значение?
0

#3 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 119
  • Регистрация: 20-Март 09
  • Репутация: 2 445
  • IPB version:3.1.x
 

Отправлено 04 Декабрь 2018 - 11:53

ТС наверное залип в 4 утра и забыл объявить $massivPlayers[] как массив
0

#4 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 413
  • Регистрация: 16-Январь 18
  • Репутация: 6
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 04 Декабрь 2018 - 19:57

Просмотреть сообщениеnewbie 04 Декабрь 2018 - 10:19 сказал(а):

А чего у Вас тут каждый раз переопределяется значение?


шо?

Просмотреть сообщениеsiv1987 04 Декабрь 2018 - 11:53 сказал(а):

ТС наверное залип в 4 утра и забыл объявить как массив $massivPlayers[]


Спасибо, если бы из-за "залип" )))

Сейчас результат такой: http://prntscr.com/lqnwvz

Сообщение изменено: TemKa_SD (04 Декабрь 2018 - 20:02)

0

#5 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 119
  • Регистрация: 20-Март 09
  • Репутация: 2 445
  • IPB version:3.1.x
 

Отправлено 04 Декабрь 2018 - 21:43

ТС прекращайте показывать код скриншотами, пишите небольшим текстом в теге code в необходимом количестве для отражения его сути. Портянок кода тоже писать не нужно.

Объясните в чем проблема написать нечто подобное - $massivPlayers[ $ид_сервера ] = $данные; У вас ид сервера нету? Покажите на живые данные как должен в итоге выглядеть массив.
По скриншотам нам очень трудно разобраться, а у вас под рукой вся структура бд и принцип работы скрипта.

Учитывая что getUsers() возвращает массив предположу что вам нужно это

			foreach( static::getUsers($g->getUsernames()) as $r )
			{
				$massivPlayers[ $r['realm'] ][] = $r;
			}


Просмотреть сообщениеTemKa_SD сказал(а):

шо?

Вы перезаписываете переменную каждый раз при обходе цикла. Разве не видно?
$massivPlayers в конце будет содержать только значение из последней итерации foreach.
1

#6 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 413
  • Регистрация: 16-Январь 18
  • Репутация: 6
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 05 Декабрь 2018 - 05:33

Просмотреть сообщениеsiv1987 04 Декабрь 2018 - 21:43 сказал(а):

ТС прекращайте показывать код скриншотами, пишите небольшим текстом в теге code в необходимом количестве для отражения его сути. Портянок кода тоже писать не нужно.

Объясните в чем проблема написать нечто подобное - $massivPlayers[ $ид_сервера ] = $данные; У вас ид сервера нету? Покажите на живые данные как должен в итоге выглядеть массив.
По скриншотам нам очень трудно разобраться, а у вас под рукой вся структура бд и принцип работы скрипта.

Учитывая что getUsers() возвращает массив предположу что вам нужно это

			foreach( static::getUsers($g->getUsernames()) as $r )
			{
				$massivPlayers[ $r['realm'] ][] = $r;
			}



Да, то что нужно, только мне не нужны данные в массиве, нужно просто вывести серверы и количество игроков на них. По поводу скринов - я вроде всё описал в первом посте.

            foreach( static::getUsers($g->getUsernames()) as $realm )
            {
                $realms[ $realm['realm'] ]++;
            }


Просмотреть сообщениеsiv1987 04 Декабрь 2018 - 21:43 сказал(а):


Вы перезаписываете переменную каждый раз при обходе цикла. Разве не видно?
$massivPlayers в конце будет содержать только значение из последней итерации foreach.


Понял. Я просто только изучаю программирование, а я то думал, почему у меня выводятся только последние данные )))

--------------------------------

Пожалуйста, помогите еще отфильтровать функцию getUsers. Дело в том, что там есть пустые массивы без данных, только с номером слота в игре: http://prntscr.com/lqu2g8 т.е по факту игроков там еще нет, такое нужно убрать.

    /**
     * Helper function for split user-string to array based return
     * @param string $usernames
     * @return array
     */
    protected static function getUsers(string $usernames) {
        $parts = explode("\t",$usernames);
        $players = [];
        for($i = 0; $i < count($parts) - 1; $i = $i + 4) {
            $players[] = [
                'name'  => $parts[$i],
                'realm' => $parts[$i + 1],
                'ping'  => $parts[$i + 2],
                //'ip'    => $parts[$i + 3],
                'color'  => $i / 4
            ];
        }
        return $players;
    }

0

#7 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 591
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 403
  • IPB version:I have no IPB
 

Отправлено 05 Декабрь 2018 - 10:55

Просмотреть сообщениеTemKa_SD сказал(а):

Пожалуйста, помогите еще отфильтровать функцию getUsers. Дело в том, что там есть пустые массивы без данных, только с номером слота в игре: http://prntscr.com/lqu2g8 т.е по факту игроков там еще нет, такое нужно убрать.



    /**
     * Helper function for split user-string to array based return
     * @param string $usernames
     * @return array
     */
    protected static function getUsers(string $usernames) {
        $parts = explode("\t",$usernames);
        $players = [];
        for($i = 0; $i < count($parts) - 1; $i = $i + 4) {
            if ($parts[$i + 1])
            {
                $players[] = [
                    'name'  => $parts[$i],
                    'realm' => $parts[$i + 1],
                    'ping'  => $parts[$i + 2],
                    //'ip'    => $parts[$i + 3],
                    'color'  => $i / 4
                ];
            }
        }

        return $players;
    }

1

#8 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 413
  • Регистрация: 16-Январь 18
  • Репутация: 6
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 05 Декабрь 2018 - 18:29

Спасибо большое, работает. Но почему условие работает, ведь переменной $realm даже не существует.
0

#9 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 3 591
  • Регистрация: 26-Октябрь 11
  • Репутация: 1 403
  • IPB version:I have no IPB
 

Отправлено 06 Декабрь 2018 - 10:12

Просмотреть сообщениеTemKa_SD сказал(а):

Но почему условие работает, ведь переменной $realm даже не существует.

Можете удалить, если смущает.
0

#10 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 413
  • Регистрация: 16-Январь 18
  • Репутация: 6
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 06 Декабрь 2018 - 23:26

Я просо хочу понять
0

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2018 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна