PHP如何遍历数组并获取特定部分

时间:2012-02-25 14:51:37

标签: php arrays list unordered

好的,所以我试图抓住一个数组的一部分,数组是一些统计数据的返回,服务器中最多可以有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
)

所以这是两个玩家的回报,因为我说它可以达到8,无论如何我只是想抓住玩家的名字,我不知道如何去做它(Player1,Player2)是唯一的数据我需要,任何帮助都是值得赞赏的,它总是会为每个玩家返回8个数据,如果这样可以让它更容易,那么它永远不会更少

(抱歉英语不好)

3 个答案:

答案 0 :(得分:2)

您希望获得非''(假设为空字符串),01的所有项目(假设此处为整数):

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

答案 1 :(得分:2)

如果您可以控制返回类型,我会将返回的数组重组为Object或数组数组,其中每个子数组包含一个玩家的所有信息。

我无法控制返回类型,并且播放器的名称始终位于返回数组中的第二个位置,您可以使用while循环迭代数组。使用从1开始的计数器,然后每次通过循环将计数器递增8。例如:

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

答案 2 :(得分:1)

如果您粘贴的数组名为$array且没有玩家的地方的值总是数字(如您的示例),则此代码将起作用:

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

var_dump($players);