2010-04-20 60 views
0

非常基本的問題..但我錯過了點。我有我的表這樣的數據:循環使用,同時

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

的輸出是一個數組。我無法改變它。

我想要在PHP這個輸出與循環的單一與數組:

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

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

我試圖做這樣的事情,其中​​$ sectionsArray是我的輸出。我想檢查SITEID是一樣的,然後做一個循環..

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

但我不明白的「分組」的使用而導致的邏輯..內循環。任何燈光都會受到歡迎。

感謝

+0

什麼是'$ sectionsArray'的確切格式嗎?它是從查詢的表結果行的陣列(eg'array (array('id'=> 1,'siteid'=> 1,'section'=>'posts'),array('id'=> 2,'id'=> 2,'section'=>'posts '),...)')?它是一個由段名稱數組組成的數組,數組索引(例如'array(1 => array('posts','aboutme','contact'),2 => ...)')?如果前者,是否按任何字段進行排序? – outis 2010-04-20 22:56:29

回答

0

感謝)..但我落得這樣做的:

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

這可以嗎?我的意思是,我有一些問題列... :(

但我還是謝謝你

1

你不能真正做到這一點只有1環,假設你不能更改查詢。當你for循環通過$sectionsArray,你必須處理你遇到它的每一行。不管你是否只想要網站1的部分,你仍然會遇到網站2,3等的部分,要麼忽略它們要麼處理它們。

如果你可以改變你的查詢,請按SITEID,然後ID。這將按網站對所有部分進行分組(注意:這與使用SQL GROUP BY語句不同)。

如果您無法更改您的查詢,請使用for循環遍歷$sectionsArray一次。在該循環中,使用按站點ID排序的不同部分構建第二個數組。迭代第二個數組以輸出所有現在處於站點ID順序的部分。

+0

hm ..如何構建第二個數組,其中按站點ID排序的不同部分...這就是要點 – ookla 2010-04-20 22:35:09

+0

您可以對數組進行排序。我將展示如何在一個答案。 – webbiedave 2010-04-20 22:49:03

0

如果你想對數組進行一次傳遞,首先進行排序(技術上,這也是一個傳球!),然後在你循環訪問時檢查siteid的變化。下面是如何通過SITEID陣列通過其循環之前進行排序:

$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

快速和骯髒的;

<?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插入一個字符串數組以供日後輸出是要走的路。 – webbiedave 2010-04-20 22:54:32