if 문을 사용하여 반복하고 알파벳순으로 처리하는 데이터가 있습니다. 내 코드는 작동하지만 문제는 매우 "긴 방법"처럼 보입니다. 이 작업을 훨씬 쉽게 할 수있는 또 다른 접근 방식이 있는지 알고 싶습니다.
내 PHP는 다음과 같습니다.
// MY QUERY
$query1 = "SELECT `categoryid`, `categoryname`
FROM `my_table_category`
ORDER BY `my_table_category`.`categoryname` ASC";
$browse = mysql_query($query1) or die(mysql_error());
$browse_rows = array();
while($row = mysql_fetch_assoc($browse)){
$browse_rows[] = $row;
}
// HERE MY ARRAYS FOR THE ALPHABET
$list_a = array(); $list_b = array(); $list_c = array();
$list_d = array(); $list_e = array(); $list_f = array();
$list_g = array(); $list_h = array(); $list_i = array();
// etc...
// HERE IS WHERE I'M GRABBING THE CATEGORY NAMES BY THEIR FIRST LETTER
// AND ADDING THEM TO AN ARRAY
foreach($browse_rows as $row){
if($row['categoryname'][0] == 'A'){
$list_a[] = $row['categoryname'];
}elseif($row['categoryname'][0] == 'B'){
$list_b[] = $row['categoryname'];
}elseif($row['categoryname'][0] == 'C'){
$list_c[] = $row['categoryname'];
}elseif($row['categoryname'][0] == 'D'){
$list_d[] = $row['categoryname'];
}
} //etc...
내 HTML은 다음과 같습니다.
<!-- HERE IS HOW I DISPLAY MY DATA -->
<div id="topics_a">
<h2>A</h2>
<ul class="browse_list">
<?
foreach($list_a as $name){
if ($holdcat <> $name) {
$holdcat = $name; ?>
<li><a href="index.php?state="<? echo $template->State."#".$browse_row['categoryid'];?>><? echo $name; ?></a></li>
<? }} ?>
</ul>
</div>
<div id="topics_b">
<h2>B</h2>
<ul class="browse_list">
<?
foreach($list_b as $name){
if ($holdcat <> $name) {
$holdcat = $name; ?>
<li><a href="index.php?state="<? echo $template->State."#".$browse_row2['categoryid'];?>><? echo $name; ?></a></li>
<? }} ?>
</ul>
</div>
//etc...
답변 후 업데이트 :
//UPDATED PHP
foreach ($browse_rows as $row) {
$initial = $row['categoryname'][0];
$lists[$initial][] = $row['categoryname'];
}
//UPDATED HTML
<? foreach ($lists as $letter => $list){ ?>
<div>
<h2><? echo $letter; ?></h2>
<ul class="browse_list">
<?
$list = array_unique($list);
foreach ($list as $cat) {
?>
<li><a href="#"><? echo $cat; ?></a></li>
<? } ?>
</ul>
</div>
<? } ?>
출력 : http://d.pr/i/bt68
각 문자에 대해 별도의 배열이 아닌 다차원 배열을 사용하십시오.
$lists = array();
foreach ($browse_list as $row) {
$initial = $row['categoryname'][0];
if (!isset($row[$initial])) {
$lists[$initial] = array();
}
$lists[$initial][] = $row['categoryname'];
}
그런 다음 표시하려면 키별로 배열을 정렬 한 다음 중첩 루프를 사용합니다.
ksort($lists);
foreach ($lists as $list) {
echo '<ul class="browse_list">';
$list = array_unique($list); // get rid of duplicates
foreach ($list as $cat) {
echo '<li><a href="#">' . $cat . '</a></li>';
}
echo '</ul>';
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다