Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php函数以数组形式返回包含数组的sql结果_Php_Mysql_Arrays_Foreach - Fatal编程技术网

php函数以数组形式返回包含数组的sql结果

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

所以我有个问题(很明显)。我有以下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操作,例如


您正在使用字符串连接而不是数组表示法:

$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;
      }