2010-08-08 5 views
1

je veux faire une nouvelle structure de données à l'aide des tableaux pour cette requête, ce sera comme:tableau problème structure de données php

va commencer par une requête et un exemple de code

query http://img85.imageshack.us/img85/170/query.png je veux faire une nouvelle la structure de données à l'aide des tableaux pour cette requête, ce sera comme:

//this is for the first headline 
[46] => Array 
     (
      [headline_name] => headline 1 
      [score] => 50 
      [questions] => Array 
       (
        [0] => Array 
         (
          [question_id] => 136 
          [question_name] => question 3 , headline 1 
          [choice_0] => 0 
          [choice_1] => 0 
          [choice_2] => 0 
          [choice_3] => 0 
          [choice_4] => 0 
         ) , 
        [1] => Array 
         (
         .... 
         ) 
       ) 
     ) 

le code que j'ai écrit vouloir parvenir à ce résultat est:

foreach ($result as $row) { 
    $data[$row->headline_id]= array( 
    'headline_name' => $row->headline_name , 
    'score' => $row->score, 
); 
    $data[$row->headline_id]['questions'][] = array (
     'question_id'=>$row->question_id , 
     'question_name'=>$row->question_name , 
     'choice_0' => $row->choice_0 , 
     'choice_1' => $row->choice_1 , 
     'choice_2' => $row->choice_2 , 
     'choice_3' => $row->choice_3 , 
     'choice_4' => $row->choice_4    
); 
} 

le problème avec elle, il ne montre que la dernière question de chaque titre, dans chaque boucle dans le tableau des questions du tableau ne sont pas ajoutés, ils écrasent les uns des autres


si je veux que cela fonctionne je dois supprimer je dois supprimer les lignes de la partition et headline_name, le code sera comme celui-ci

foreach ($result as $row) { 

    $data[$row->headline_id]['questions'][] = array (
     'question_id'=>$row->question_id , 
     'question_name'=>$row->question_name , 
     'choice_0' => $row->choice_0 , 
     'choice_1' => $row->choice_1 , 
     'choice_2' => $row->choice_2 , 
     'choice_3' => $row->choice_3 , 
     'choice_4' => $row->choice_4 
); 

} 

je veux une solution pour le résoudre avec l'écriture du headline_name et le score dans le tableau

+0

Je ne suis pas vraiment sûr que vous avez besoin des crochets [] après [ « des questions »]; serait plus comme $ data [$ ligne-> headline_id] [ « des questions »] = array ( mais si vous Looping ligne par ligne, je ne vois pas un tableau dans votre ligne, donc je ne vois pas ce que vous voulez en boucle – fabjoa

Répondre

2

le problème est que vous réinitialiser le tableau dans la deuxième fois lorsque vous entrez dans la boucle par =,

pour le résoudre, vous devez ajouter un peu si

if(!isset($data[$row->headline_id])) { 
     $data[$row->headline_id]= array( 
     'headline_name' => $row->headline_name , 
     'score' => $row->score, 
    ); 
    } 

une autre question: i recommandons de ne pas stocker ces champs dans ce tableau est normalise pas,

headline_name 
score 
+0

merci, ils sont normalisés je viens de faire une requête avec beaucoup de jointures internes, je ne voulais pas faire plusieurs requêtes pour obtenir cette table, donc j'ai fait une grande avec une certaine redondance –