PHP, как перебрать массив и захватить определенные части
Итак, я пытаюсь захватить одну часть массива, массив является возвращением для некоторых статистических данных, на сервере может быть до 8 игроков, данные, которые я получаю, выглядят так
Array (
[0] => 1
[1] => Player1
[2] =>
[3] => 1
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 1
[9] => Player2
[10] =>
[11] => 1
[12] => 0
[13] => 0
[14] => 0
[15] => 0
)
так что это возврат для 2 игроков, так как я сказал, что это может быть до 8, в любом случае я пытаюсь просто захватить имена игроков, и я не уверен, как это сделать ( Player1, Player2), это единственные данные, которые мне нужны, Любая помощь приветствуется, она всегда возвращает 8 частей данных на игрока, никогда больше, никогда меньше, если это облегчает
(Извините за плохой английский)
3 ответа
Вы хотите получить все предметы, которые не являются ''
(предполагая пустую строку), 0
или же 1
(предполагая здесь целые числа):
$playerNames = array_diff($array, array('', 0, 1));
Если вы более точно знаете, какой на самом деле формат массива, вы также можете создать небольшой "парсер":
$playerSize = 8;
$playerFields = array('_1', 'name', '_3', '_4', '_5', '_6', '_7', '_8');
$players = array_chunk($array, $playerSize);
foreach($players as &$player)
{
$player = (object) array_combine($playerFields, $player);
}
unset($player);
Это разбирает $array
в другой массив $players
который содержит один объект на каждого игрока. Каждый объект имеет name
недвижимость сейчас:
printf("%d Player(s):\n", count($players));
foreach($players as $i => $player)
{
printf("#%d: %s\n", $player->name);
}
Если у вас есть контроль над типом возвращаемого значения, я бы реструктурировал возвращаемый массив либо в Object, либо в массив массивов, где каждый вложенный массив содержит всю информацию для одного игрока.
Если у вас нет контроля над типом возвращаемого значения, а имя Player всегда находится на второй позиции в возвращаемом массиве, вы можете использовать цикл while для итерации по массиву. Используйте счетчик, начинающийся с 1, а затем увеличивайте счетчик на 8 каждый раз в цикле. Например:
$i= 1;
while ($i < count($return_var)) {
$name = $return_var[$i];
// do something w/ name
$i += 8;
}
Если вставленный вами массив называется $array
а значения мест без игроков всегда числовые (как в вашем примере), этот код будет работать:
$players = array();
foreach($array as $player){
if(!empty($player) && !is_numeric($player){
$players[]=$player;
}
}
var_dump($players);