这是我现在的代码:
<?php
$sql = DB::query("SELECT name FROM stores ORDER BY name");
foreach ($sql as $row){ $name = $row["name"]; }
// don't know how to get the current letter
$current_letter = '?';
// Set the start at 1
$i = 1;
foreach ($sql as $row){
// If the loop hits 1, add <div>
if($i == 1)
echo '<div class="store-wrapper">'.PHP_EOL;
echo '<div class="store-letter">Store Letter - '. $current_letter .'</div>'.PHP_EOL;
echo '<ul>'.PHP_EOL;
echo $id = "\t<li>".$name.'</li>'.PHP_EOL;
// If the loop hits 3, add </div>
if($i == 3) {
echo '</ul>'.PHP_EOL;
echo '</div>'.PHP_EOL; // end .store-wrapper
// Reset the counter
$i = 0;
}
// Increment up
$i++;
}
?>
我的代码有问题吗?这是我想要实现的代码输出:
<div class="store-wrapper">
<div class="store-letter">Store Letter - A</div>
<ul>
<li>ajhgjgj</li>
<li>abgjkhjh</li>
<li>avbnvnmnm</li>
</ul>
</div>
<div class="store-wrapper">
<div class="store-letter">Store Letter - B</div>
<ul>
<li>bgfghfj</li>
<li>bhgjhgj</li>
<li>bvkjhgkj</li>
</ul>
</div>
<div class="store-wrapper">
<div class="store-letter">Store Letter - C</div>
<ul>
<li>cgfghfj</li>
<li>chgjhgj</li>
<li>cvkjhgkj</li>
</ul>
</div>
另一件事是,我真的不知道如何获得每个小组的第一个字母。
代码的问题在于输出不会显示为上面的示例,当达到最大3 <li>
时,这些组不会与下一个可用字母混在一起。
我做错了什么?
答案 0 :(得分:1)
您不需要第一个foreach
循环。它只是重复分配相同的变量$name
。您可以在回显DIV的循环中执行此操作。
您可以使用$name[0]
获取字符串的第一个字母。
不是测试$i == 3
知道何时关闭UL和DIV,而是测试$i > 3
以跳过打印名称。否则,如果一个字母在其组中只有1个或2个名字,您将永远不会关闭该组。
$current_letter = null;
foreach ($sql as $row) {
$name = $row['name'];
$first_letter = $name[0];
if ($first_letter != $current_letter) {
$i = 1;
if ($current_letter) { // close the previous DIV before starting new one
echo '</ul>'.PHP_EOL;
echo '</div>'.PHP_EOL;
}
$current_letter = $first_letter;
echo '<div class="store-wrapper">'.PHP_EOL;
echo '<div class="store-letter">Store Letter - '. $current_letter .'</div>'.PHP_EOL;
echo '<ul>'.PHP_EOL;
}
if ($i > 3) {
continue;
}
echo "\t<li>".$name.'</li>'.PHP_EOL;
$i++;
}
if ($current_letter) { // close the last DIV
echo '</ul>'.PHP_EOL;
echo '</div>'.PHP_EOL;
}
答案 1 :(得分:0)
1.如果没有使用for循环,你也可以使用$test = array_column($sql,'name');
php函数来获取$ sql中的'name'。例如,$test[0]
。
2.之后substr($test[0], 0, 1)
会给出数组中的第一个名字。
3.要获得第一个字符,请使用AppHost.Configure()