Самый быстрый способ форматирования результатов SQL в PHP - PullRequest
1 голос
/ 01 апреля 2009

Какой самый быстрый (самый эффективный) способ в 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?

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 апреля 2009

Попробуйте это:

$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);
0 голосов
/ 01 апреля 2009

ezSQL на http://www.woyano.com/jv/ezsql должен делать то, что вы хотите. Я взял на себя проект, который использует его, и он выглядит довольно хорошо вместе. Я сам предпочитаю быть ближе к металлу, но если вы хотите абстрагироваться, то в моем опыте это выглядит довольно убедительно.

...