2012-02-25 118 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; 
}