Bir süre ile döngü

4 Cevap php

Çok temel bir soru .. ama ben noktayı kaçırıyorum .. benim masada bu veri var:

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

Çıkışı bir dizidir. Ben bunu değiştiremezsiniz.

Ben bu dizi ile döngü için bir single ile php bu çıkışı yapmak istiyorum:

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

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

$ SectionsArray benim çıktı nerede olduğunu, böyle bir şey yapmaya çalışıyorum. Ve ben siteid aynı ise bir döngü yapmak, sonra kontrol etmek istediğiniz ..

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>;
}

Ama ben bir döngü içinde .. Bir süre ile sonuçlarını "gruplama" mantığı alamadım. Herhangi bir ışık kabul edilecektir.

Teşekkürler

4 Cevap

teşekkürler .. ama ben bu yapıyor sona erdi:

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

Bu ok? Yani, diziler ile bazı sorunlar var ...: (

Yine de teşekkürler

Eğer gerçekten sorguyu değiştiremezsiniz varsayarak, sadece 1 döngü ile bunu yapamaz. Aracılığıyla for döngü gibi $sectionsArray, bunu karşılaşma olarak her satır ile uğraşmak zorunda. Bu sadece siteye 1 için bölümler istiyorsanız, hala ve etc, sitede 2, 3 bölümleri karşılaşma olacak farketmez Onları yok saymak ya da onlarla başa ya.

Eğer sorguyu değiştirebilirsiniz, eğer tarafından sipariş var SITEID, sonra da ID. Bu olacak grup site tarafından tüm bölümler (not: bu SQL GROUP BY deyimi kullanarak aynı değildir).

Eğer sorguyu değiştiremezsiniz, $sectionsArray kez yineleme aracılığıyla döngü için kullanın. Bu döngü içinde, site kimliği tarafından sipariş farklı bölümleri ile ikinci bir dizi oluşturmak. Site kimliği için şimdi tüm bölümleri çıktı bu ikinci dizi yineleme.

Hızlı ve kirli ;)

<?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'];
}

Eğer dizide bir geçiş yapmak istiyorsanız, ilk sıralama (teknik olarak, o! Ayrıca bir pas) ve sonra bunun aracılığıyla döngü gibi site kimliği değişikliği için kontrol edin. İşte bunu döngü önce site kimliği ile dizi sıralayabilirsiniz nasıl:

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