2013-01-08 73 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>"; 
    }