2010-05-18 6 views
3

Cela pourrait être facile pour vous les gars, mais je ne pouvais pas l'obtenir.Comment faire une boucle dans un tableau retour de la requête de Mysql

J'ai une classe php qui interroge la base de données et renvoie le résultat de la requête. J'affecte le résultat à un tableau et je veux l'utiliser sur mon script main.php. J'ai essayé d'utiliser echo $ var [0] ou echo $ var [1] mais les résultats sont 'array' au lieu de ma valeur. Tout le monde peut m'aider à propos de ce problème? Merci beaucoup!

Ma classe php

<?php 
class teamQuery { 

      function teamQuery(){ 


      } 
      function getAllTeam(){ 
       $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS); 
        if (!$connection) { 
         die("Database connection failed: " . mysql_error()); 
        } 

        $db_select = mysql_select_db(DB_NAME,$connection); 
        if (!$db_select) { 
         die("Database selection failed: " . mysql_error()); 
        } 

        $teamQuery=mysql_query("SELECT * FROM team", $connection); 

        if (!$teamQuery){ 
         die("database has errors: ".mysql_error()); 
          } 
        $ret = array(); 

        while($row=mysql_fetch_array($teamQuery)){ 

        $ret[]=$row; 
        }  
        mysql_free_result($teamQuery); 

        return $ret; 
        } 


      } 


?> 

Mon php sur le main.php

$getTeam=new teamQuery(); 
$team=$getTeam->getAllTeam(); 

    //echo $team[0] or team[1] output 'array' string! 
    // while($team){ 
    // do something } can't work either 

    // How to loop through the values?? 

Merci!

+0

Merci beaucoup! J'ai l'impression d'être assis à côté d'un groupe d'experts. Je n'ai posté ma question que depuis moins de 5 minutes et j'ai reçu tellement de réponses. Vous les gars, ça berce! +1 à vous tous. Depuis Felix Kling explique beaucoup de détails. Je lui ai donné 'réponse acceptée!' Merci encore! – FlyingCat

Répondre

2

Vous obtenez cette sortie parce $team[0] et $team[1] sont en effet des tableaux. Ce sont les lignes de votre table de base de données et chaque ligne est composée de plusieurs champs, par ex. id, name etc.
Vous avez 2 dimensions, qui pourrait ressembler à ceci:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => foo 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => bar 
     ) 
) 

à boucle à travers les données, utilisez for ou foreach:

foreach($team as $member) { 
    foreach($member as $k=>$v) { 
     echo $k . ': ' . $v; 
    } 
} 

De plus, le documentation about arrays pourrait être utile de lire pour vous.

1

Essayez cette (et leurs variantes):

foreach ($team as $member) { 
    echo $member[0]; 
    echo $member[1]; 
    //etc. 
} 
1

C'est parce que chacun des éléments de votre tableau est aussi un tableau. print_r le tableau pour le voir de vos propres yeux. Par exemple, si vous souhaitez afficher les noms de chaque équipe, vous devez d'abord parcourir le tableau externe et accéder aux champs individuels à l'intérieur de la boucle.

foreach ($team as $t) { 
    echo $t["name"] . "<br />"; // hopefully it's "name", the * in your query isn't really self-documenting 
} 
1
foreach ($team as $t) 
    echo $t[0]; 
2

Premier conseil: utilisez la fonction print_r pour afficher les tableaux. C'est très pratique pour voir comment les données sont stockées dans une variable. Enveloppez-le dans la balise HTML <pre> afin que tout ne soit pas sur une seule ligne. Exemple:

echo '<pre>'; print_r($variable); echo '</pre>';

Deuxième: vous ne voulez probablement pas enregistrer la sortie comme ça. Afficher votre variable $ret avec print_r et voir comment les données sont stockées. Ce qui est plus utile est d'utiliser mysql_fetch_assoc. Essayez ceci:

while ($row = mysql_fetch_assoc($teamQuery)) { 
    echo '<pre>'; print_r($row); echo '</pre>' 
}

Vous pouvez voir que chaque ligne contient maintenant un key et un value, par exemple « Name » et « John Doe », « âge » et « 35 », etc. De cette façon, vous pouvez afficher une certaine valeur comme ceci:

echo $row['name']; // John Doe

Lorsque vous récupérez plusieurs articles de la base de données, et que vous voulez stockez-les dans un tableau, vous avez besoin d'un identifiant unique pour chacune de ces entrées.Généralement, il s'agit du numéro d'identification unique de la table dans laquelle les données sont stockées. De cette façon, vous pouvez regrouper toutes ces clés et valeurs ensemble, comme ceci:

while ($row = mysql_fetch_assoc($teamQuery)) { 
    $results[$row['id']]['name'] = $row['name']; 
    // etc 
}

Vous pouvez le faire manuellement pour chaque champ que vous avez récupéré. Si vous avez besoin tous les champs (ce que vous faites habituellement lors de la sélection *), cela est plus facile:

while ($row = mysql_fetch_assoc($teamQuery)) { 
    foreach ($row as $key => $value) { 
    $results[$row['id']][$key] = $value; 
    } 
}

Le tableau $results contient maintenant quelque chose comme ceci:

Array 
(
    [1] => Array 
     (
      [id] => 1 
      [name] => John Doe 
     ) 

    [2] => Array 
     (
      [id] => 2 
      [name] => Jane Doe 
    ) 
)

... et tous les autres valeurs. Vous pouvez maintenant utiliser à nouveau la fonction foreach déjà mentionnée pour afficher chacune de ces entrées. Vous n'avez pas à utiliser $key et $value; Il est généralement plus facile de choisir quelque chose de plus significatif. Par exemple, au lieu de $results (ou votre $ret), utilisez $team ou $members, parce que c'est ce que vous récupérez. Ensuite, affichez chacun de ces membres comme ceci:

foreach ($team as $memberId => $member) { 
    echo $member['name']; // John Doe, Jane Doe, etc. 
}
+0

wow ... tu m'éclaires vraiment! Merci pour les détails. Pour le mal j'ai déjà donné la réponse acceptée à Felix Kling. J'apprécie vraiment votre temps et aide! – FlyingCat

Questions connexes