2010-04-20 15 views
0

Très question fondamentale .. mais je me manque le point .. J'ai ces données sur ma table:boucle avec un certain temps

ID SITEID SECTION 
1 1  posts 
2 2  posts 
3 1  aboutme 
4 1  contact 
5 2  questions 

La sortie est un tableau. Je ne peux pas le changer.

Je veux faire de cette sortie sur php avec une seule boucle avec ce tableau:

<h1> sections for site 1 </h1> 
    posts 
    aboutme 
    contact 

<h1>sections for site 2 </h1> 
    posts 
    questions 

Je suis en train de faire quelque chose comme ça, où $ sectionsArray est ma sortie. Et je veux vérifier si siteid est le même, puis faire une boucle ..

for ($j = 0; $j < sizeof($sectionsArray); $j++) { 
    while (siteid == 1) { 
     echo '<h1>' . $sectionsArray['siteid'] . '</h1>'; 
    } 
    echo "<a href='section.php?id=' . $sectionsArray['id'] . ' '">' . $sectionsArray['section'] . '</a>; 
} 

Mais je ne comprends pas la logique du « groupement » les résultats avec un certain temps .. dans une boucle. Toute lumière sera la bienvenue.

Merci

+0

Quel est le format exact de 'sectionsArray' $? Est-ce un tableau de lignes résultant de l'interrogation de la table (eg'array (array ('id' => 1, 'siteid' => 1, 'section' => 'messages'), array ('id' => 2, 'id' => 2, 'section' => 'messages '), ...) ')? Est-ce un tableau de tableaux de noms de section, indexés par l'ID du site (par exemple' array (1 => array (' posts ',' aboutme ',' contact '), 2 => ...) ')? Si le premier, est-il trié par tous les champs? – outis

Répondre

0

merci .. mais je fini par faire ceci:

for ($j=0;$j<sizeof($sectionArray);$j++) { 

$section_id = $sectionArray[$j]['id']; 
$section_name = $sectionArray[$j]['secao']; 

    echo '<div id="menu">'; 
    echo '<div class="section">'.$section_name.'</div>'; 

    $categoryArray = $objectCategory->listCategory($section_id); // return my array from db  

    for ($ii=0;$ii<sizeof($categoryArray);$ii++) { 
     $categoryId = $categoryArray[$ii]['id']; 
     $categoryName = $categoryArray[$ii]['category']; 

     echo "<div class=\"item\">"; 
     echo "<a href=\"category.php?id=$categoryId\">$categoryName</a>"; 
     echo "</div>"; 
    } 
    echo '</div>';  
} 

Est-ce correct? Je veux dire, j'ai des problèmes avec des tableaux ... :(

Mais merci quand même

1

Vous ne pouvez pas vraiment faire cela avec seulement 1 boucle, en supposant que vous ne pouvez pas changer la requête. Comme vous for boucle en $sectionsArray, vous devez traiter chaque ligne que vous rencontrez. Peu importe si vous voulez seulement des sections pour le site 1, vous rencontrerez toujours des sections pour le site 2, 3, etc & soit les ignorer ou les traiter.

Si vous pouvez modifier votre requête, commandez-la par SITEID, puis ID. Cela va regrouper toutes les sections par site (note: ce n'est pas la même chose que d'utiliser l'instruction SQL GROUP BY).

Si vous ne pouvez pas modifier votre requête, utilisez votre boucle for pour parcourir une fois le $sectionsArray. Dans cette boucle, construisez un second tableau avec les différentes sections ordonnées par l'identifiant du site. Itérer à travers ce second tableau pour afficher toutes les sections qui sont maintenant dans l'ordre d'identification du site.

+0

hm .. comment puis-je construire un second tableau avec les différentes sections ordonnées par site id ... c'est le point – ookla

+0

Vous pouvez trier le tableau. Je vais montrer comment dans une réponse – webbiedave

0

Si vous voulez faire un passage sur le tableau, commencez par trier (techniquement, c'est aussi un passage!), Puis vérifiez s'il y a un changement de siteid lorsque vous le parcourez. Voici comment vous pouvez trier le tableau par siteid avant une boucle à travers elle:

$sections = array(
    array('id'=>1, 'siteid'=>1, 'section'=>'posts'), 
    array('id'=>2, 'siteid'=>2, 'section'=>'posts'), 
    array('id'=>3, 'siteid'=>1, 'section'=>'aboutme'), 
    array('id'=>4, 'siteid'=>1, 'section'=>'contact'), 
    array('id'=>5, 'siteid'=>2, 'section'=>'questions'), 
); 

usort($sections, 'sortBySiteId'); 

function sortBySiteId($a, $b) 
{ 
    if ($a['siteid'] == $b['siteid']) { 
     return 0; 
    } 
    return ($a['siteid'] < $b['siteid']) ? -1 : 1; 
} 
1

rapide et sale;)

<?php 
$arr = array(
    array('id' => 1, 'site_id' => '1', 'section' => 'posts'), 
    array('id' => 2, 'site_id' => '2', 'section' => 'posts'), 
    array('id' => 3, 'site_id' => '1', 'section' => 'aboutme'), 
    array('id' => 4, 'site_id' => '1', 'section' => 'contact'), 
    array('id' => 5, 'site_id' => '2', 'section' => 'questions') 
); 

$htmlStrings = array(); 
$curr_site_id = '0'; 

foreach($arr as $item) 
{ 
    if ($item['site_id'] != $curr_site_id) 
    { 
     $curr_site_id = $item['site_id']; 
     if (!isset($htmlStrings[$curr_site_id])) $htmlStrings[$curr_site_id]['header'] = '<h' . $curr_site_id . '>Sections for site ' . $curr_site_id . '</h' . $curr_site_id . '>'; 
     $htmlStrings[$curr_site_id]['content'] .= '<br />' . $item['section']; 
    } 
    else 
    { 
     $htmlStrings[$curr_site_id]['content'] .= '<br />' . $item['section']; 
    } 
} 

foreach($htmlStrings as $section) 
{ 
    echo $section['header']; 
    echo $section['content']; 
} 
+0

+ 1 shuff dans un tableau de chaînes pour la sortie ultérieure est le chemin à parcourir. – webbiedave