Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

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[] как массив

Опубликовано:
  • Автор

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

 

шо?

 

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

 

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

 

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

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

Опубликовано:

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

 

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

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

 

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

 

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

 

шо?

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

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

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

Опубликовано:

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

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

Опубликовано:
  • Автор

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

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.