Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

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

Рекомендованные сообщения

12/04/18 01:08 (изменено)

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
12/04/18 16:58 (изменено)

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

 

шо?

 

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

 

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

 

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

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

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

 

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

По скриншотам нам очень трудно разобраться, а у вас под рукой вся структура бд и принцип работы скрипта.

 

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

 

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

 

шо?

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

$massivPlayers в конце будет содержать только значение из последней итерации foreach.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

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

По скриншотам нам очень трудно разобраться, а у вас под рукой вся структура бд и принцип работы скрипта.

 

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

 

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

 

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

 

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

 

 

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

$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;
   }

Поделиться сообщением


Ссылка на сообщение

Пожалуйста, помогите еще отфильтровать функцию 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;
   }

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...