1

数年間の開発の後、MySQL の結果を以下のような連想配列にフォーマットするより洗練された方法があるかどうかを自問しました。

ここに、私が通常どのように行うかを示すダミーコードを示します。

$sql = 'SELECT field1, field2 FROM sample_table';
$res = $db->prepare($sql)->getAll();
$formatted = array();

foreach ($res as $row) {
    $formatted[$row['field1']] = $row['field2'];
}

私はこれらのようなことを非常に頻繁に行っているため、よりエレガントで迅速な方法があるかどうかを自問しました。

ありがとう!

4

1 に答える 1

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());
于 2013-08-06T18:30:47.903 に答える