【问题标题】:PHP: Warning: sort() expects parameter 1 to be array, resource givenPHP:警告:sort() 期望参数 1 是数组,给定资源
【发布时间】:2011-09-04 09:04:12
【问题描述】:

我想用 sort() 函数排列表列表的数组,但我得到了同样的警告 我的代码如下:

 <?PHP 
     require_once("lib/connection.php"); 

     $result = mysql_query("SHOW TABLES FROM `st_db_1`");

     sort($result);
     foreach ($result as $result){
     echo $result ;
     } 
 ?>

我得到的警告是:

Warning: sort() expects parameter 1 to be array, resource given in C:\wamp\www\Copy (4)       of st_db_1\test_2.php on line 9
Warning: Invalid argument supplied for foreach() in C:\wamp\www\Copy (4) of st_db_1\test_2.php on line 10

【问题讨论】:

  • 您需要先fetch 结果。例如。使用$row = mysql_fetch_array($result):
  • 您需要查找mysql_query 以及mysql_fetch_assoc 返回的内容。顺便说一句,您需要使用print_r 而不是echo 来查看其结构。
  • 在您的 foreach 循环中,您正在覆盖 $result 变量,这可能根本不是您想要的。

标签: php mysql


【解决方案1】:

警告非常明确:mysql_query 不会返回包含查询结果的数组,而是返回资源。您需要一个类似mysql_fetch_array() 的函数来返回您需要的数据(并且您可以对其执行排序操作)。

mysql_query()http://nl3.php.net/mysql_query的使用见手册

也许不相关,但您可以通过在查询中添加 ORDER BY &lt;fieldname&gt; 来立即在 MySQL 中对结果进行排序。

【讨论】:

    【解决方案2】:

    变量$result 只是result 类型的资源。然后您需要从结果集中获取数据,例如mysql_fetch_assoc().

    $result = mysql_query("SHOW TABLES FROM `st_db_1`");
    $array = array();
    while ($row = mysql_fetch_assoc($result)) {
        $array[] = $row["Tables_in_st_db_1"];
    }
    sort($array);
    foreach ($array as $item) {
       echo $item;
    }
    

    【讨论】:

      【解决方案3】:

      我没有提供可以想象的最有效的代码,但这应该可以清楚地说明发生了什么并解决您的问题:

       $result = mysql_query("SHOW TABLES FROM `st_db_1`");
      
       $my_array_of_table_names = array();
       while ( $row = mysql_fetch_array($result, MYSQL_NUM)) {
           $my_array_of_table_names[] = $row[0];
       }
       sort($my_array_of_table_names);
      
       foreach ($my_array_of_table_names as $table_name){
           echo "$table_name\n";
       }
      

      【讨论】:

      • 是的,将排序移到了正确的位置。这就是我在发布之前没有测试的结果。呃,现在就去测试,以确保我没有让情况变得更糟。
      • 没问题,主要问题是问这个问题的人没有获取行。你展示了这一点。现在我们得到了几乎相同的答案。我给了你一点,以后可能会删除我的答案,因为它们太相似了。
      【解决方案4】:

      您的问题是您实际上并没有从查询中获取数据。

      mysql_query() 不会给你记录集。

      它的作用是查询数据库并返回一个数据库资源,然后您可以使用它来获取数据。

      你需要的是在调用mysql_query()之后,你还需要调用mysql_fetch_array()或类似的。 (有一系列可用的功能,但这可能是在这种情况下使用的最佳功能)。然后是sort() 的数据,而不是$result

      【讨论】:

        【解决方案5】:

        它清楚地表明:它需要一个数组,而你传递了其他东西。

        如果您检查了 $result 的类型,您会发现它不是一个数组,而是一个资源。

        【讨论】:

        • 我检查了,如果表名是一个数组,但我可以使用 while 循环成功获取表数组
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 2011-03-26
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多