fonction php pour revenir sql résultats qui contiennent des tableaux, comme un tableau
Donc je vais avoir un problème (évidemment). J'ai l'MySQL suivant les données de la table
7 USER1 1,1,1,10,1 The Guys Team 8,7,13,14,16
8 USER1 1,1,1,10,1 The Girls Team 7,12,15
10 USER1 1,1,1,10,1 Dog Team 8,7,14,15
J'ai écrit une fonction pour récupérer les données, et les retourner.
function ShowSetTeams($coach){
$result = mysql_query("SELECT * FROM `teams` WHERE coach = '$coach'") or trigger_error(mysql_error());
while($row = mysql_fetch_array($result)){
foreach($row AS $key => $value) { $row[$key] = stripslashes($value); }
$id = $row['id'];
$teamname = $row['teamname'];
$team = $row['team'];
$event = $row['event'];
$push .= array($id, $teamname, $team, $event);
}
return $push;
}
Lorsque j'appelle la fonction, comme ci-dessous
$info = ShowSetTeams("USER1");
- Je obtenir ce
ArrayArrayArray
J'ai essayé en faisant écho à $info[0], $infos[1], $infos[2], mais obtenir ce
Arr
De sorte que chaque ligne dans l'info matrice est la matrice de résultats. Je devrais être capable de faire $info[0][0] et obtenir la première valeur de l'ID, du premier résultat?
Fatal error: Cannot use string offset as an array
Im à perte. Comment puis-je obtenir pour chacune des valeurs du tableau retourné? Et plus au point, comment ai-je pu exécuter un foreach opération sur les comme
foreach( $info as $key => $value){
$key[0] //ID
$key[1] //TEAMNAME
$key[2] //TEAM
$key[3] //EVENT
}
Vous devez vous connecter pour publier un commentaire.
Vous êtes en utilisant la concaténation de chaîne au lieu de la notation de tableau:
Vous devez également initialiser
$push = array();
avant de commencer à l'utiliser.Vous êtes également fait beaucoup de travail supplémentaire... vous pourriez faire:
Sauf si vous avez, je ne voudrais pas utiliser de les saisir de nouveau à un tableau indexé numériquement - vous êtes juste difficile à comprendre dans votre code plus tard. Utilisation
mysql_fetch_assoc()
pour ce faire$push[] = $row
?mysql_fetch_array
vous aurez toutes les valeurs à deux reprises.Je pense qu'ils le problème est à la ligne:
Qui traite de l' $pousser comme une chaîne de caractères et concatène un tableau qui est transformé en une chaîne de caractères. Essayez:
Vous utilisez un la concaténation de chaîne et de la cession de l'opérateur
.=
qui vous permet de convertir vos tableaux dans les chaînes. Essayez le tableau pousser opérateur$array[]
à la place:Ne pas concaténer les $pousser, mais l'utilisation
Quelques autres remarques:
votre schéma de base de données n'est pas correctement normalisé! vous ne devriez pas avoir les chaînes de la liste des identifiants utilisateur stockées dans votre tableau, mais de disposer d'une référence de type plusieurs-à-plusieurs table entre les équipes de la table et les joueurs de la table.
vous ne devriez jamais (ou presque jamais) utiliser le
*
sélecteur dans les requêtes. Vous créez vous-même des pièges avec qui. Au lieu d'indiquer exactement les colonnes que vous souhaitez récupérer.vous pourriez obtenir la même information, sans avoir à mettre ensemble les $pousser la matrice de vous-même. Si les colonnes de base de données sont correctement nommés, vous pouvez utiliser un fetch_assoc et il suffit de faire
$push[] = $row
mysql_fetch_assoc()
au lieu demysql_fetch_array()
$push = array();
avant ", alors que"use $push[] = ...
au lieu de$push .= ...