2009-04-01 6 views
1

Quelle est la façon la plus rapide (plus performante) en PHP pour transformer un (Mon) résultat SQL comme:moyen le plus rapide pour formater les résultats SQL en PHP

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

Dans le plus facile à utiliser:

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

Ou y a-t-il une bibliothèque qui le fait déjà, sans l'inflexibilité et la performance accrues de l'ORM complet?

Merci

Répondre

2

Essayez ceci:

$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

Ah, tu m'as battu. –

+0

Cela ne filtrerait pas les doublons. Bien sûr, la requête devrait le faire mais je vérifierais toujours. (Et éventuellement enregistrer un avertissement sur les doublons) – epochwolf

-1

ezSQL à http://www.woyano.com/jv/ezsql devraient faire ce que vous voulez. J'ai repris un projet qui l'utilise et il semble assez bien mis en place. Moi je préfère être un peu plus proche du métal, mais si vous voulez faire abstraction, cela semble assez solide dans mon expérience.

Questions connexes