php函数以数组形式返回包含数组的sql结果
所以我有个问题(很明显)。我有以下MySQL表数据php函数以数组形式返回包含数组的sql结果,php,mysql,arrays,foreach,Php,Mysql,Arrays,Foreach,所以我有个问题(很明显)。我有以下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
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操作,例如
您正在使用字符串连接而不是数组表示法:
$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;
}
除非您必须这样做,否则我也不会使用将其重新设置为数字索引数组的关键帧-您只是在以后的代码中使其更难理解。使用来执行此操作不要连接$push,而是使用
$push[] = array();
return $push;
其他几点意见:
- 您的数据库架构未正确正常化!您不应该在表中存储用户ID字符串,而应该在teams表和players表之间有一个多对多表的引用
- 您不应该(几乎永远)在查询中使用
*
选择器。你用它为自己制造陷阱。而是指明要检索的确切列
- 您可以获得相同的信息,而无需自己组装$push数组。如果数据库列的名称正确,您可以使用fetch_assoc,只需执行
$push[]=$row
我认为他们的问题在于线路:
$push .= array($id, $teamname, $team, $event);
它将$push视为一个字符串,并连接一个数组,该数组将转换为一个字符串。尝试:
$push[] = array($id, $teamname, $team, $event);
您正在使用将数组转换为字符串的。请尝试使用数组推送操作符$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;
}
您应该使用mysql\u fetch\u assoc()
而不是mysql\u fetch\u array()
您应该通过$push=array()将$push定义为数组代码>在“while”之前
您应该使用$push[]=…
而不是$push.=…
稍后我将进一步探讨这一点,但感谢您的建议。现在切换已经太晚了。嗨,格雷格,为什么要使用数组_值?那不是会破坏阵列吗?似乎他想要信息作为一个关联数组。那么为什么不干脆$push[]=$row
?@tharkun我使用了array_值,因为这就是@Patrick的代码does@Greg:但是使用mysql\u fetch\u array
您将拥有两次所有值。我以为他使用的是assoc。。。我想我已经习惯了,我只是到处读。固定的
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;
}