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);
Другие вопросы по тегам