PHP, как перебрать массив и захватить определенные части - PullRequest
0 голосов
/ 25 февраля 2012

Хорошо, так что я пытаюсь захватить одну часть массива, массив является возвращением для некоторых статистических данных, на сервере может быть до 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 ]

2 голосов
/ 25 февраля 2012

Вы хотите получить все элементы, которые не '' (при условии, пустая строка), 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);
}
2 голосов
/ 25 февраля 2012

Если у вас есть контроль над типом возвращаемого значения, я бы реструктурировал возвращаемый массив либо в Object, либо в массив массивов, где каждый вложенный массив содержит всю информацию для одного игрока.

Если у вас нет контроля над типом возвращаемого значения, а имя проигрывателя всегда находится на второй позиции в возвращаемом массиве, вы можете использовать цикл while для перебора массива. Используйте счетчик, начинающийся с 1, а затем увеличивайте счетчик на 8 каждый раз в цикле. Например:

$i= 1;
while ($i < count($return_var)) {
    $name = $return_var[$i];
    // do something w/ name
    $i += 8;
}
1 голос
/ 25 февраля 2012

, если вставленный вами массив называется $array, а значения мест без игроков всегда числовые (как в вашем примере), этот код будет работать:

$players = array();
foreach($array as $player){
    if(!empty($player) && !is_numeric($player){
        $players[]=$player;
    }
}

var_dump($players);
...