2012-02-25 3 views
0

Хорошо, поэтому я пытаюсь захватить одну часть массива, массив - это возврат для некоторой статистики, на сервере может быть до 8 игроков, данные, которые я получаю подобно этомуPHP, как перемещаться по массиву и захватывать определенные части

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 частей данных на игрока никогда больше никогда не меньше, если это облегчает

(извините за плохой английский)

+0

Как вы строите этот массив? возможно, установив, как вы построите массив, будет легче манипулировать им! –

+0

Являются ли эти другие числа строками или целыми числами? – hakre

ответ

1

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

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

var_dump($players); 
+0

это сработало спасибо за вашу помощь – twizzle

2

Вы хотите, чтобы все элементы, которые не являются '' (предполагая, что пустую строку), 0 или 1 (предполагается, что целые числа здесь):

$playerNames = array_diff($array, array('', 0, 1)); 

Если вы более конкретно знать, какой формат массива на самом деле, вы можете также гр reate какой-нибудь «парсер»:

$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); 
} 
+0

также хорошо работал thx – twizzle

2

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

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

$i= 1; 
while ($i < count($return_var)) { 
    $name = $return_var[$i]; 
    // do something w/ name 
    $i += 8; 
}