首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数作为数组返回包含数组的sql结果。

问函数作为数组返回包含数组的sql结果。
EN

Stack Overflow用户
提问于 2009-10-12 07:55:05
回答 5查看 12.3K关注 0票数 2

所以我有个问题(很明显)。我有以下MySQL表数据

代码语言:javascript
复制
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

我编写了一个函数来检索数据并返回它。

代码语言:javascript
复制
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;
}

当我调用该函数时,如下所示

代码语言:javascript
复制
$info = ShowSetTeams("USER1");

我明白了

代码语言:javascript
复制
ArrayArrayArray 

我试过回显$info,$info1和$info2,但是得到了这个

代码语言:javascript
复制
Arr

信息数组中的每一行都是结果数组。我应该能够执行$info并从第一个结果获得第一个ID值,对吗?

代码语言:javascript
复制
Fatal error: Cannot use string offset as an array

我不知所措。--如何获得返回数组的每个值?和更重要的是,我如何对它们运行foreach操作,例如

代码语言:javascript
复制
foreach( $info as $key => $value){
$key[0] //ID
$key[1] //TEAMNAME
$key[2] //TEAM
$key[3] //EVENT
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-12 07:58:16

您使用的是字符串连接,而不是数组符号:

代码语言:javascript
复制
$push[] = array($id, $teamname, $team, $event);

您还应该在开始使用$push = array();之前初始化它。

你还做了很多额外的工作..。你可以这么做:

代码语言:javascript
复制
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()进行此操作

票数 6
EN

Stack Overflow用户

发布于 2009-10-12 07:58:59

不要连接$push,而是使用

代码语言:javascript
复制
$push[] = array();

return $push;

还有几点意见:

  • 您的数据库模式没有被正确地标准化!您不应该在表中存储用户in字符串,而是在teams表和players表之间有一个多对多的引用表。
  • 您不应该(几乎从不)在查询中使用*选择器。你用它给自己制造陷阱。相反,请指示要检索的确切列。

,

  • ,您可以获得相同的信息,而不必自己将$push数组放在一起。如果数据库列已正确命名,则可以使用$push[] = $row

并执行fetch_assoc。

票数 1
EN

Stack Overflow用户

发布于 2009-10-12 08:01:09

我认为他们的问题在于这句话:

代码语言:javascript
复制
 $push .= array($id, $teamname, $team, $event);

它将$push视为字符串,并将被转换为字符串的数组连接起来。尝试:

代码语言:javascript
复制
 $push[] = array($id, $teamname, $team, $event);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1553279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档