Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
TemKa_SD

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

Recommended Posts

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

 

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
       ];

Edited by siv1987

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

шо?

 

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

 

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

 

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

Edited by TemKa_SD

Share this post


Link to post
Share on other sites

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

 

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

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

 

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

 

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

 

шо?

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

ТС прекращайте показывать код скриншотами, пишите небольшим текстом в теге 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;
   }

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...