TemKa_SD Posted December 4, 2018 Share Posted December 4, 2018 (edited) Здравствуйте. Не знаю как правильно назвать тему, задача следующая: мне нужно вывести игровые сервера и количество игроков на них, при этом, данные находятся в одном поле. 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 December 4, 2018 by siv1987 Link to comment Share on other sites More sharing options...
newbie Posted December 4, 2018 Share Posted December 4, 2018 $massivPlayers = static::getUsers($g->getUsernames()); А чего у Вас тут каждый раз переопределяется значение? Link to comment Share on other sites More sharing options...
siv1987 Posted December 4, 2018 Share Posted December 4, 2018 ТС наверное залип в 4 утра и забыл объявить $massivPlayers[] как массив Link to comment Share on other sites More sharing options...
TemKa_SD Posted December 4, 2018 Author Share Posted December 4, 2018 (edited) А чего у Вас тут каждый раз переопределяется значение? шо? ТС наверное залип в 4 утра и забыл объявить как массив $massivPlayers[] Спасибо, если бы из-за "залип" ))) Сейчас результат такой: http://prntscr.com/lqnwvz Edited December 4, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
siv1987 Posted December 4, 2018 Share Posted December 4, 2018 ТС прекращайте показывать код скриншотами, пишите небольшим текстом в теге code в необходимом количестве для отражения его сути. Портянок кода тоже писать не нужно. Объясните в чем проблема написать нечто подобное - $massivPlayers[ $ид_сервера ] = $данные; У вас ид сервера нету? Покажите на живые данные как должен в итоге выглядеть массив.По скриншотам нам очень трудно разобраться, а у вас под рукой вся структура бд и принцип работы скрипта. Учитывая что getUsers() возвращает массив предположу что вам нужно это foreach( static::getUsers($g->getUsernames()) as $r ) { $massivPlayers[ $r['realm'] ][] = $r; } шо?Вы перезаписываете переменную каждый раз при обходе цикла. Разве не видно? $massivPlayers в конце будет содержать только значение из последней итерации foreach. 1 Link to comment Share on other sites More sharing options...
TemKa_SD Posted December 5, 2018 Author Share Posted December 5, 2018 ТС прекращайте показывать код скриншотами, пишите небольшим текстом в теге 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; } Link to comment Share on other sites More sharing options...
newbie Posted December 5, 2018 Share Posted December 5, 2018 Пожалуйста, помогите еще отфильтровать функцию 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 Link to comment Share on other sites More sharing options...
TemKa_SD Posted December 5, 2018 Author Share Posted December 5, 2018 Спасибо большое, работает. Но почему условие работает, ведь переменной $realm даже не существует. Link to comment Share on other sites More sharing options...
newbie Posted December 6, 2018 Share Posted December 6, 2018 Но почему условие работает, ведь переменной $realm даже не существует. Можете удалить, если смущает. Link to comment Share on other sites More sharing options...
TemKa_SD Posted December 6, 2018 Author Share Posted December 6, 2018 Я просо хочу понять Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now