Я хотел бы упорядочить массив списка таблиц с помощью функции 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
Предупреждение довольно ясно: mysql_query
не возвращает массив с результатами запроса, а ресурс. Для возврата необходимых данных вам нужна функция, например mysql_fetch_array()
и для которой вы можете выполнить операцию сортировки.
См. Руководство по использованию mysql_query()
http://nl3.php.net/mysql_query
И, возможно, не связаны, но вы можете отсортировать результаты в MySQL сразу, добавив ORDER BY <fieldname>
к вашему запросу.
Результат переменной $ 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; }
Я не предоставляю наиболее эффективный код, который можно себе представить, но это должно дать понять, что происходит и решить вашу проблему:
$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_query()
не дает вам набора записей.
Он выполняет запрос базы данных и возвращает ресурс базы данных, который затем можно использовать для получения данных.
Вам нужно после вызова mysql_query()
, тогда вам также нужно вызвать mysql_fetch_array()
или подобное. (имеется ряд доступных функций, но это, вероятно, лучший вариант для использования в этом случае). Затем sort()
данные из этого, а не $result
.
В нем четко сказано: он ожидает массив, и вы передаете что-то еще.
Если бы вы проверили тип $result
вы бы увидели, что это не массив, введите ресурс.