好的,所以我试图抓住一个数组的一部分,数组是一些统计数据的返回,服务器中最多可以有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个数据,如果这样可以让它更容易,那么它永远不会更少
(抱歉英语不好)
答案 0 :(得分:2)
您希望获得非''
(假设为空字符串),0
或1
的所有项目(假设此处为整数):
$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);