2013-11-15 62 views
0

創建值的列表我創建了一個數組:PHP/CakePHP的 - 從數據庫

$alphabet = range('A', 'Z'); 

這創造了所有的英文字母的列表。然後我用一個for循環打印出所有的英文字母的:

<ul> 

<? for ($i = 0; $i < 26; $i++): ?> 

    <li><span class="head-menu"><?= $alphabet[$i]; ?></span> 

     <ul> 

      <li><a href="#">Some Item</a></li> 

      <li><a href="#">Some Item</a></li> 

     </ul> 

    </li> 

<? endfor ?>     

</ul> 

在該代碼中,我想替換:

<li><a href="#">Some Item</a></li> 

與數據庫中,以便值的列表數據庫名稱列中值的第一個字母與$ alphabet [i]是相同的字母。

因此,舉例來說,如果我有一個名爲「食」只是一個「名稱」字段的數據庫,我想輸出爲這樣:

A 
    Apple 
B 
    Banana 
C 
    Carrots 
    Crackers 

其中蘋果,香蕉,胡蘿蔔和餅乾都是值數據庫。

我該如何去做這件事?

回答

0
$alphabet = range('A', 'Z'); 
$r = mysql_query("SELECT name FROM food"); 
if ($r) { 
    while($row = mysql_fetch_row($r)) { 
     $alphabet[$row[0][0]][] = $row[0]; 
    } 
} 

For cake

$alphabet = range('A', 'Z'); 
$food = $this->Food->find('list'); 
foreach ($food as $v) 
    $alphabet[$v[0]][] = $v; 
2

我會做的是讀你的數據庫出到一個數組並填充它的方式

$sql = 'SELECT field FROM table ORDER BY field'; 
$res = $mysqli->query($sql); 
$data = []; 
$current = NULL; 
while($row = $res->fetch_assoc()) { 
    if($row['field']{0} != $current) { 
     $current = $row['field']{0}; 
     $data[$current] = []; 
    } 
    $data[$current][] = $row['field']; 
} 

所以現在你看起來像這樣

Array( 
    'A' => Array('Apples'), 
    'B' => Array('Bananas', 'Blueberries') 
    etc 
} 

一個數組,那麼你只是重複你的代碼

<ul> 
<?php for ($i = 0; $i < 26; $i++): ?> 
    <li><span class="head-menu"><?= $alphabet[$i]; ?></span> 
     <ul> 
      <?php foreach($data[$alphabet[$i]] as $fruit): ?> 
       <li><a href="#"><?php echo $fruit ?></a></li> 
      <?php endforeach ?> 
     </ul> 
    </li> 
<? endfor ?>     
</ul>