1

PHP で (My)SQL の結果を次のように変換する最速 (最高のパフォーマンス) の方法は何ですか?

array(
 array('user_name' => 'john', 'tag_id' => 1, 'tag_name' => 'foo'),
 array('user_name' => 'john', 'tag_id' => 2, 'tag_name' => 'bar'),
 array('user_name' => 'rick', 'tag_id' => 3, 'tag_name' => 'foobar'),
 array('user_name' => 'rick', 'tag_id' => 2, 'tag_name' => 'bar')
);

より使いやすく:

array(
 array('name' => 'john', 'tags' => array(
  array('id' => 1, 'name' => 'foo'),
  array('id' => 2, 'name' => 'bar')
 ),
 array('name' => 'rick', 'tags' => array(
  array('id' => 3, 'name' => 'foobar'),
  array('id' => 2, 'name' => 'bar')
 )
);

または、完全な ORM の柔軟性の低下やパフォーマンスへの影響なしに、これを行うライブラリは既にありますか?

ありがとう

4

2 に答える 2

2

これを試して:

$data = array(
    array('user_name' => 'john', 'tag_id' => 1, 'tag_name' => 'foo'),
    array('user_name' => 'john', 'tag_id' => 2, 'tag_name' => 'bar'),
    array('user_name' => 'rick', 'tag_id' => 3, 'tag_name' => 'foobar'),
    array('user_name' => 'rick', 'tag_id' => 2, 'tag_name' => 'bar')
);
$final = array();
foreach ($data as $item) {
    if (!isset($final[$item['user_name']])) {
        $final[$item['user_name']] = array(
            'name' => $item['user_name'],
            'tags' => array()
        );
    }
    $final[$item['user_name']]['tags'][] = array(
        'id'   => $item['tag_id'],
        'name' => $item['tag_name']
    );
}
$final = array_values($final);
于 2009-04-01T18:39:40.750 に答える
-1

http://www.woyano.com/jv/ezsqlのezSQLはあなたが望むことをするはずです。私はそれを使用するプロジェクトを引き継ぎました、そしてそれは非常にうまくまとめられているように見えます。私自身は金属に少し近づけることを好みますが、抽象化したい場合は、私の経験ではかなり堅実に見えます。

于 2009-04-01T18:41:22.680 に答える