0

好的,所以我试图抓住一个数组的一个部分,数组是一些统计数据的返回,服务器中最多可以有 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 条数据,如果这样更容易的话,永远不会更少

(抱歉英语不好)

4

3 回答 3

2

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

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

$i= 1;
while ($i < count($return_var)) {
    $name = $return_var[$i];
    // do something w/ name
    $i += 8;
}
于 2012-02-25T14:58:14.533 回答
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);
}
于 2012-02-25T14:57:16.713 回答
1

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

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

var_dump($players);
于 2012-02-25T14:54:20.167 回答