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

戻り値の型を制御できる場合は、返される配列をオブジェクトまたは配列の配列に再構築し、各サブ配列に 1 人のプレーヤーのすべての情報を含めます。

戻り値の型を制御できず、プレーヤーの名前が常に戻り値配列内の 2 番目の位置にある場合は、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

''(空の文字列を想定)、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);

これは、各プレーヤーごとに 1 つのオブジェクトを含む$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 に答える