0

我创建了一个数组:

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

使用来自数据库的值列表,使得数据库中 name 列中值的第一个字母与 $alphabet[i] 的字母相同。

例如,如果我有一个名为“food”的数据库,只有一个“name”字段,我想要这样的输出:

A
    Apple
B
    Banana
C
    Carrots
    Crackers

其中 Apple、Banana、Carrots 和 Crackers 是数据库中的值。

我该怎么做呢?

4

2 回答 2

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>
于 2013-11-15T02:52:53.977 回答
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];
    }
}

蛋糕用

$alphabet = range('A', 'Z');
$food = $this->Food->find('list');
foreach ($food as $v)
    $alphabet[$v[0]][] = $v;
于 2013-11-15T02:54:30.920 回答