Извините за невероятно новый вопрос, но я вижу, как я дрейфую в плохие практики, если не спрашиваю.
У меня есть метод PHP, который я хочу вернуть всем значениям данного столбца базы данных, чтобы разместить содержимое в выпадающем меню для HTML-формы. Я мог бы, очевидно, построить весь HTML в методе PHP и вернуть его в виде строки, но я думаю, что это довольно плохая практика.
Поскольку методы PHP могут возвращать только одно значение, я предполагаю, что мне нужно будет вызвать метод несколько раз, чтобы заполнить выпадающее меню или передать массив из метода.
Что было бы хорошим решением этой (предположительно) общей проблемы? Благодарю.
Ну, массив является одним значением, содержащим массу других значений. Поэтому просто попросите метод вернуть массив результатов.
отредактируйте: как указывает Гаммерштейн, вы можете использовать объекты, но их как хорошие / плохие, как массивы, в зависимости от контекста. Очень похожий.
Вы можете использовать объект в качестве возвращаемого типа. Так;
class MyReturnValue { public $Value1; public $Value2; } function getMyValues() { $results = GetDatabaseValues( ); // Assume this returns an associative array $result = new MyReturnValue(); $result.Value1 = $results["Value1"]; $result.Value2 = $results["Value2"]; }
Затем в вашем коде вы можете ссылаться на $ result.Value1 и т. Д.
Для этого нет функции PHP, поэтому вам придется сформировать массив из результатов.
$column = array() $query = mysql_query("SELECT * FROM table ORDER BY id ASC"); while($row = mysql_fetch_array($query)){ $column[] = $row[$key] }
Затем передайте $ column вашему представлению (HTML)
foreach($column as $value) { echo "<li>" . $value . "</li>"; }
Вы можете иметь массивы в массивах, поэтому, если у вас есть таблица с несколькими столбцами, вы можете назначить их массиву в виде отдельных массивов:
$all_results = array(); foreach($rowInDatabase as $key => $value){ // each row will be an array with a key of column name and value of column content depending how you get the data from the DB. $colname = $key; $colVal = $value; //this is an array $all_results[$colname] = $colVal; //append the current row to the array } }
такой код заполнит ваш массив массивом в строке таблицы, поэтому, если есть десять строк и пять столбцов, вы можете получить столбец 2 строки 2 с помощью $ all_results [1] [2]; (начиная с 0).
Не совсем уверен, что я понимаю, что вы хотите сделать полностью, но вы всегда можете передать результат обратно из метода, а затем пропустите его в своем HTML.
Ваш метод будет примерно таким:
public function my_method() { $result = $db->query($sql_here); return $result; }
И тогда ваш HTML будет
<select> <? $result = $class->my_method(); while($row = $result->fetch_assoc()) { echo '<option>'.$row['some_col'].'</option>'; } ?> </select>