Frage

Was ist die schnellste (bestes Ergebnis erzielt) Art und Weise in PHP ist ein (My) SQL Ergebnis wie zu transformieren:

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')
);

In die einfacher zu bedienen:

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')
 )
);

Oder gibt es eine Bibliothek, die dies bereits der Fall ist, ohne die zusätzlichen Inflexibilität und Leistungseinbußen von Voll ORM?

Danke

War es hilfreich?

Lösung

Versuchen Sie folgendes:

$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);

Andere Tipps

ezSQL unter http://www.woyano.com/jv/ezsql tun sollten was Sie wollen. Ich habe über ein Projekt übernommen, die es verwendet und es ganz gut zusammen erscheinen. Ich selbst lieber etwas näher an das Metall sein, aber wenn man abstrahieren hinwünschen dann scheint es ziemlich solide in meiner Erfahrung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top