PHP MySQLは、html出力をグループの最初の文字で3つずつ並べます。
これは私が今持っているコードです:
<?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>
もう1つは、各グループの最初の文字を取得する方法がよくわからないことです。
コードの問題は、出力が上の例として表示されず、最大3つの <li> に達したときに、グループが次に使用可能な文字にジャンプしないことです。
私が間違っていることは何ですか?
答え :
解決策:
最初の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){//新しいDIVを開始する前に前のDIVを閉じる
エコー''。PHP_EOL;
エコー'
- '。PHP_EOL;
}
if($i > 3){
継続する;
}
echo "\t
- "。$name。' '。PHP_EOL; $ i ++; } if($ current_letter){//最後のDIVを閉じる エコー'
答え :
解決策:
1.forループを使用せずに、$sqlから「name」のみを取得するためにarray_column()
php関数を使用することもできます。たとえば、 $test = array_column($sql,'name');
です。
2.その後、 $test[0]
は配列内の名を示します。
3.最初の文字を取得するには、 substr($test[0]、0、1)
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。