2009-08-15 6 views
1

S'il vous plaît, voir la réponse de Cha où nous sommes assez proche de la solution finale. Nous déboguez le code avec ces donnéesPour comprendre un tableau dans PHP quand on lui donne l'autre variable dans le tableau

  1. database in PostgreSQL
  2. test sql-queries

-

problème lié au problème non résolu dans le code

Comment pouvez-vous référer à le php -element dans le tableau suivant?

J'ai les données suivantes

Array 
(
    [1] => Array 
     (
      [tag] => Array 
       (
        [0] => php 
        [1] => scripts 
       ) 

     ) 

    [2] => Array 
     (
      [tag] => Array 
       (
        [0] => ssh 
        [1] => network 
       ) 

     ) 

) 

où les tableaux représentent tags_and_id, question_id et tag respectivement. En d'autres termes, la variable $tags_and_id a la colonne question_id et qui a toujours une sous-colonne tag et cela toujours chaque étiquette unique.

Je voudrais savoir comment vous pouvez vous référer à l'étiquette php.

je courir en vain d'obtenir rien en sortie

echo $tags_and_id[1]['tag'][0]; 
+0

Répondé à vos commentaires. –

+1

Le code PHP final devrait être dans ma réponse maintenant. –

+1

juste un conseil, vous pouvez utiliser print_r ($ tag) pour voir le tableau entier –

Répondre

4

Si vous souhaitez ajouter plus d'informations sur chaque question, vous pouvez simplement ajouter à $end_array[1]. Voici le tableau ma première déclaration foreach crée:

// The end result turns out to be something like this: 
    array(
      1 => array(
         'tags' => array(
             0 => "php", 
             1 => "sql"), 
        ) 
     ); 

<?php 
$dbconn = pg_connect("host=localhost port=5432 dbname=noa user=noa password=123"); 

if(empty($_GET)) { 
    // to get titles and question_ids 
    $result_titles_tags = pg_prepare($dbconn, "query777", 

     "SELECT question_id, title 
     FROM questions 
     WHERE question_id IN 
     ( 
      SELECT question_id 
      FROM questions 
      ORDER BY was_sent_at_time 
      DESC LIMIT 50 
     ) 
     ORDER BY was_sent_at_time 
     DESC LIMIT 50;" 
    ); 
    $result_titles = pg_execute($dbconn, "query777", array()); 

    // TAGS 
    $result_tags = pg_prepare($dbconn, "query9", 
     "SELECT question_id, tag 
     FROM tags 
     WHERE question_id IN 
      (SELECT question_id 
      FROM questions 
      ORDER BY was_sent_at_time 
      DESC LIMIT 50 
      );" 
    ); 
    $result_tags = pg_execute($dbconn, "query9", array()); 

et le code dans la question initialement

// Go through each Tag 
    while($tags_and_Qid = pg_fetch_array($result_tags)) { 
     // Add the Tag to an array of tags for that question 
     $end_array [ $tags_and_Qid['question_id'] ] ['tag'] [] = $tags_and_Qid['tag']; 
    } 

    // First compile the Data 
    // Go through each question 

    while($titles_and_Qid = pg_fetch_array($result_titles)) { 
     echo ("<div class='question_summary'>" 
       . $titles_and_Qid['title'] 
        // Problem here! 
        // How can you print the titles such that 
        // they are assigned to each tag -set? 
      ); 

     $i = 0; 
     // Then Loop Through each question 
     foreach($end_array as $tags_and_Qid['question_id'] => $tags_and_Qid['tag']) 
     { 

     echo ("\n\nITERATION NUMBER IS " . $i);  // The code is buggy here 
        // For instance, we get 9 iterations for 3 questions 

     // Create the starting HTML 
     echo ("<div class='tags'>"); 
      // Go through each tag 

     // not sure about this 
       foreach($end_array[$tags_and_Qid['question_id']] ['tag'] as $tag) 

       { 
        echo ("<a class='post_tag' href='?tag=" 
        . $tag 
        . "'>" 
         . $tag 
        . "</a>" 
        ); 
       } 
     // end the html 
      echo '</div>'; 

     $i++; 
     } 
     echo ("</div>"); 
    } 

    // to end the list of questions 
    echo ("</div>" 
    ); 
} 
?> 
+0

Rien ne doit être changé tant qu'il se termine avec un tableau qui contient une colonne avec le nom 'question_id' et' tag' –

+0

En fait, vous devriez changer la ligne '$ id = $ data ['questions_question_id'];' à $ id = $ data ['question_id']; ', mais c'est tout. –

+0

Fondamentalement, dans la première déclaration 'foreach', les clés à l'intérieur des parenthèses de' $ data' doivent correspondre à vos noms de colonnes. –

1

Si print_r échoue, alors quelque chose ne va pas avant cela. Vos données ne sont probablement pas structurées de la façon dont vous pensez qu'elles sont structurées.

Et puis-je recommande simplement que si vous avez seulement la balise et le nom de question, vous stocker tout comme un tableau de niveau unique qui ressemble à ce qui suit:

array(
'php' => '7', 
'sql' => '7', 
'python' => '3' 
) 

Si vous avez d'autres choses que vous êtes aller au magasin alors oui, vous devrez faire ce que vous faites. Dans ce cas, si vous ne pouvez pas accéder au tableau avec les clés entre crochets, alors vos clés ne sont probablement pas ce que vous pensez qu'elles sont, ou il y a quelque chose qui ne va pas dans votre code quelque part.

J'ai regardé votre code, et pourquoi accède-t-on aux résultats de la requête comme $row[0], au lieu de $row['question_id']?

En outre, vous ne pouvez pas print_r($result_tags), car les données d'une requête ne sont pas réellement stockées par PHP, elles sont seulement référencées. par conséquent, vous devez utiliser une boucle while pour le parcourir, car le script appelle une ligne de résultats à la fois.

Vous dites: foreach($result_tags as $question_id => $data) Cela n'a aucun sens, car il n'existe aucune valeur pour $result_tags, à l'exception d'une référence à la requête qui peut être utilisée pour appeler une ligne de résultats à la fois. Au lieu de cela, vous voulez faire:

while($row2 = pg_fetch_array($result_tags)) { 
    $question_id = $row2['questions_question_id']; 
    $data = $row2['data']; 
    $end_array[$question_id]['tags'][] = $data; 
     // you can't have your $data['tag'] as that refers to the 
     // value of an array that doesn't exist 
} 
Questions connexes