php函数返回包含数组的sql结果,作为数组

时间:2009-10-12 07:55:05

标签: 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 = 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
}

5 个答案:

答案 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)

  1. 您应该使用mysql_fetch_assoc()代替mysql_fetch_array()
  2. 您应该在“while”
  3. 之前按$push = array();定义$ push as array
  4. 您应该use $push[] = ...而不是$push .= ...