所以我有一个问题(显然)。我有以下MySQL表数据
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
我写了一个函数来检索数据,并将其返回。
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;
}
当我调用该函数时,如下所示
$info = ShowSetTeams("USER1");
我明白了
ArrayArrayArray
我尝试回显$ info [0],$ info [1]和$ info [2],但是得到了这个
Arr
因此info数组中的每一行都是结果数组。我应该可以做$ info [0] [0]并获得第一个ID值,从第一个结果开始吧?
Fatal error: Cannot use string offset as an array
我不知所措。 如何获取返回数组的每个值?更重要的是,我如何在它们上运行foreach操作,例如
foreach( $info as $key => $value){
$key[0] //ID
$key[1] //TEAMNAME
$key[2] //TEAM
$key[3] //EVENT
}
答案 0 :(得分:6)
您正在使用字符串连接而不是数组表示法:
$push[] = array($id, $teamname, $team, $event);
在开始使用之前,您还应初始化$push = array();
。
你也做了很多额外的工作......你可以这样做:
function ShowSetTeams($coach)
{
$push = array();
$result = mysql_query("SELECT id, teamname, team, event FROM `teams` WHERE coach = '$coach'") or trigger_error(mysql_error());
while($row = mysql_fetch_array($result, MYSQL_NUM))
{
// I doubt you actually need to run stripslashes on your data...
$row = array_map('stripslashes', $row);
$push[] = $row;
}
return $push;
}
除非你必须这样做,否则我不会将它重新键入数字索引数组 - 你只是在后面的代码中更难理解。使用mysql_fetch_assoc()
执行此操作
答案 1 :(得分:1)
不要连接$ push但使用
$push[] = array();
return $push;
其他一些评论:
您的数据库架构未正确规范化!你不应该在你的表中存储用户ID的字符串,而是在team表和player表之间有一个多对多的引用表。
您绝不应该(几乎从不)在查询中使用*
选择器。你用它来构建陷阱。而是指出要检索的确切列。
您可以获得相同的信息,而无需自己组合$ push数组。如果正确命名了数据库列,则可以使用fetch_assoc并执行$push[] = $row
答案 2 :(得分:1)
我认为他们的问题在于:
$push .= array($id, $teamname, $team, $event);
将$ push视为一个字符串并连接一个变成字符串的数组。尝试:
$push[] = array($id, $teamname, $team, $event);
答案 3 :(得分:1)
您正在使用string concatenation and assignment operator .=
将数组转换为字符串。请尝试使用数组推送运算符$array[]
:
function ShowSetTeams($coach) {
$result = mysql_query("SELECT * FROM `teams` WHERE coach = '$coach'") or trigger_error(mysql_error());
$array = array();
while ($row = mysql_fetch_assoc($result)) {
$array[] = array(stripslashes($row['id'], stripslashes($row['teamname'], stripslashes($row['team']), stripslashes($row['event']));
}
return $array;
}
答案 4 :(得分:1)
mysql_fetch_assoc()
代替mysql_fetch_array()
$push = array();
定义$ push as array
use $push[] = ...
而不是$push .= ...