PHP:Warning:sort()要求参数1是数组,资源给定

PHP:Warning:sort()要求参数1是数组,资源给定,php,mysql,Php,Mysql,我想用sort()函数来排列表列表的数组,但得到了同样的警告 我的代码如下: <?PHP require_once("lib/connection.php"); $result = mysql_query("SHOW TABLES FROM `st_db_1`"); sort($result); foreach ($result as $result){ echo $result ; } ?> 它清楚地表示:

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

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

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

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

它清楚地表示:它需要一个数组,而您传递的是其他内容


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

警告非常清楚:
mysql\u query
不会返回包含查询结果的数组,而是一个资源。您需要一个类似于
mysql\u fetch\u array()
的函数来返回所需的数据(并且可以对其执行排序操作)

有关mysql\u query()的使用,请参阅手册。


也许是不相关的,但您可以通过在查询中添加
orderby
来立即在MySQL中对结果进行排序。

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

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

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

mysql\u query()
不会提供记录集

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


您需要的是在调用
mysql\u query()
之后,还需要调用
mysql\u fetch\u array()
或类似的函数。(有一系列可用的函数,但这可能是本例中使用的最佳函数)。然后
sort()
从中提取数据,而不是
$result

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


你需要先知道结果。例如,使用
$row=mysql\u fetch\u数组($result):
您需要查找
mysql\u query
返回的内容,以及
mysql\u fetch\u assoc
。顺便说一句,您需要使用
print\r
而不是
echo
来查看的结构。以及在您的foreach循环中,您正在覆盖
$result
变量,这可能根本不是您想要的。我选中了,,,如果表名是数组,但我可以使用while loopYup成功地获取表的数组,将排序移动到正确的位置。这就是我在发布前没有测试的原因。嗯,我现在要去测试一下,以确保我没有让事情变得更糟。没问题,主要问题是问这个问题的人没有拿到行数。你展示了这个。现在我们得到了几乎相同的答案。我给了你一个要点,以后可能会删除我的答案,因为它们太相似了。
 $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";
 }
$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;
}