2013-01-08 74 views
4

組陣列結果我使用以下代碼來顯示webisites形式的數據庫的圖像&名稱。按字母順序PHP

<fieldset> 
    <h1>A</h1>   
    <ul> 
     <?php foreach ($records as $key) { ?> 
     <li class="siteli"> <a href="#" class="add">   
      <div id="site-icon"><img src="<?php echo $key->site_img; ?>" width="16" height=""></div> 
      <p id="text-site"> <?php echo $key->site_name; ?></p> 
     </li> 
     <?php } ?> 
    </ul> 
</fieldset> 

現在,我想這組加入A,B,C等爲標題的字母順序產生。

實施例,

A  
Amazon  
Aol  
Aol Mail 

B  
Bing  
Bogger 
+0

的'$ records' – cetver

回答

6

可以使用array sorting對該數組進行排序。在你的情況,我會選擇sort()

我們顯示出與前面的信中的鏈接,我會用:

<?php 
$records = ['Aaaaa', 'Aaaa2', 'bbb', 'bbb2', 'Dddd']; 
$lastChar = ''; 
sort($records, SORT_STRING | SORT_FLAG_CASE); //the flags are needed. Without the `Ddd` will come before `bbb`. 
//Available from version 5.4. If you have an earlier version (4+) you can try natcasesort() 

foreach($records as $val) { 
    $char = $val[0]; //first char 

    if ($char !== $lastChar) { 
    if ($lastChar !== '') 
     echo '<br>'; 

    echo strtoupper($char).'<br>'; //print A/B/C etc 
    $lastChar = $char; 
    } 

echo $val.'<br>'; 
} 
?> 

這將輸出類似

A 
Aaaa2 
Aaaaa 

B 
bbb 
bbb2 

D 
Dddd 

注意,在C缺失,因爲有開始C.

+0

顯示轉儲並且不會有輸出空行;)需要額外的「
」 ... – TomTom

+0

這只是一個概念證明。它也沒有其他格式:)但更新它添加額外的BR –

+0

@Hugo Delsing非常感謝你....這一次它的作品.. –

1

沒有的話這是@Hugo Delsing的回答修改。

我需要能夠像這樣將我的品牌組合在一起,但代碼中的一個錯誤是,如果我說過iForce Nutrition和Inner Armor,它會將這些組合成兩個獨立的組,因爲這個字母大小寫。

變化我做了
因爲它完全按字母順序排列,這是隻有第一個字母我改變SORT_STRING到SORT_NATURAL

改變會:(!$字符== $ lastChar)如果到如果(用strtolower( $字符)!==用strtolower($ lastChar))

<?php 
$records = ['FinaFlex', 'iForce Nutrition', 'Inner Armour', 'Dymatize', 'Ultimate Nutrition']; 
$lastChar = ''; 
sort($records, SORT_NATURAL | SORT_FLAG_CASE); //Allows for a full comparison and will alphabetize correctly. 

foreach($records as $val) { 
$char = $val[0]; //first char 

    if (strtolower($char) !== strtolower($lastChar)) { 
    if ($lastChar !== '') 
    echo '<br>'; 

    echo strtoupper($char).'<br>'; //print A/B/C etc 
    $lastChar = $char; 
    } 

    echo $val.'<br>'; 
    } 
?> 

最後的輸出會是這樣

D 
Dymatize 

F 
FinaFlex 

I 
iForce Nutrition 
Inner Armour 

U 
Ultimate Nutrition 

我希望這有助於大家,並且非常感謝雨果提供這讓我正是我需要的是代碼。

您可以在這裏看到我的例子https://hyperionsupps.com/brand-index

0
$records = ['FinaFlex', 'iForce Nutrition', 'Inner Armour', 'Dymatize', 'Ultimate Nutrition']; 

    $temp=array();  
    $first_char=""; 
    for($i=0;$i<count($records);$i++) 
    { 
     $first_char= strtoupper ($records[$i][0]);    
      if(!in_array($first_char, $temp)) 
      { 
       echo strtoupper($first_char).'<br>'; //print A/B/C etc      

      } 
      $temp[]= $first_char; 
      echo $records[$i]."<br>"; 
    }