经过几年的开发,我才问自己,如果有一种更优雅的方式将MySQL结果格式化为下面的关联数组。
这里有一些虚拟代码,显示我通常如何做。
$sql = 'SELECT field1, field2 FROM sample_table';
$res = $db->prepare($sql)->getAll();
$formatted = array();
foreach ($res as $row) {
$formatted[$row['field1']] = $row['field2'];
}
由于我经常这样做,我问自己是否有更优雅或更快的方式。
谢谢!
答案 0 :(得分:0)
您可以创建一个类来处理重复性任务。想法是封装 以后可以使用最少量的代码重用的行为。这是一个基本的例子。 请记住,您可能希望委托数据库内容(连接,查询等) 去另一个班级。另请注意,此类特定于具有键值的数组 对(用于具有2列的查询)。
<?php
//Takes a two columns SQL query and format it to optain an array with key-value pair
class queryToMap{
private $formattedArray = array(); //The formated array
//Execute the query and format the array
public function executeQuery($sql){
$res = $this->dbQuery($sql);
while($row = $res->fetch_array()){
$this->formattedArray[$row[0]] = $row[1];
}
}
//Returns the formated array
public function getArray(){
return $this->formattedArray;
}
//Execute query and return the result
private function dbQuery($sql){
//DB connection...
$db = new mysqli("localhost", "bob", "123", "db");
//if the query is based on user input, better use prepared statement
$res = $db->query($sql);
return $res;
}
}
//Use of the class
$a = new queryToMap();
$a->executeQuery("SELECT F_CUST_ID, F_CUST_NAME FROM TP_CUSTOMER");
//Output the array
var_dump($a->getArray());