2012-02-25 3 views
0

Ok, donc j'essaie d'attraper une seule partie d'un tableau, le tableau est le retour de certaines statistiques, il peut y avoir jusqu'à 8 joueurs dans le serveur, les données que je reçois est comme cePHP comment faire une boucle dans un tableau et saisir des parties spécifiques

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 
) 

de sorte que est le retour pour 2 joueurs, comme je l'ai dit, il peut être jusqu'à 8, de toute façon je suis en train de saisir simplement les noms des joueurs et je ne suis pas sûr de savoir comment s'y prendre (Joueur1 , Player2) est la seule donnée dont j'ai besoin, toute aide est appréciée, elle renvoie toujours 8 morceaux de données par joueur jamais plus jamais si cela le rend plus facile

(désolé pour un mauvais anglais)

+0

Comment construisez-vous cette matrice? peut-être en fixant comment vous construisez le tableau, il sera plus facile de le manipuler! –

+0

Ces autres nombres sont-ils des chaînes ou des nombres entiers? – hakre

Répondre

1

si le tableau que vous avez collé est appelé $array et les valeurs des lieux sans les joueurs sont toujours numériques (comme votre exemple), ce code fonctionnera:

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

var_dump($players); 
+0

cela a travaillé merci pour votre aide – twizzle

2

Vous voulez obtenir tous les éléments qui ne sont pas '' (en supposant une chaîne vide), ou 01 (en supposant ici des entiers):

$playerNames = array_diff($array, array('', 0, 1)); 

Si vous connaissez plus précisément ce que le format du tableau est en fait, vous pouvez aussi c réer un peu petit « analyseur »:

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

Cela ne parse $array dans un autre tableau $players qui contient un objet par chaque joueur. Chaque objet a maintenant la propriété name:

printf("%d Player(s):\n", count($players)); 

foreach($players as $i => $player) 
{ 
    printf("#%d: %s\n", $player->name); 
} 
+0

a également bien fonctionné thx – twizzle

2

Si vous avez le contrôle sur le type de retour, je restructurer le réseau étant retourné soit dans un objet ou un tableau de tableaux où chaque sous-réseau contient toutes les informations pour un joueur. Si vous n'avez aucun contrôle sur le type de retour et que le nom du joueur est toujours en deuxième position dans le tableau de retour, vous pouvez utiliser une boucle while pour parcourir le tableau. Utilisez un compteur commençant à 1 puis incrémentez le compteur de 8 à chaque fois dans la boucle. Par exemple:

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