2012-02-25 111 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

你是如何構建這個數組的?也許通過修復你如何構建數組,它將更容易操作! – 2012-02-25 14:55:03

+0

那些其他數字是字符串還是整數? – hakre 2012-02-25 14:55:30

回答

1

如果粘貼的數組稱爲$array和地方沒有玩家的值總是數值(如你的例子),該代碼將工作:

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

var_dump($players); 
+0

這工作謝謝你的幫助 – twizzle 2012-02-25 15:13:44

2

你想要得到的是不是所有的項目''(假設空字符串),01(這裏假設整數):

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

如果更具體知道什麼陣的格式實際上,你可以還包括c 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 2012-02-25 15:27:01

2

如果你有超過返回類型的控制,我會重組陣列返回要麼爲對象或數組的數組,其中每個子陣列包含了所有的信息一名球員。

我沒有對返回類型的控制權,玩家的名字總是在返回數組中的第二個位置,您可以使用while循環遍歷數組。使用從1開始的計數器,然後每次通過循環將計數器遞增8。例如:

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