2016-12-12 4 views
0

私はループしていて、ifステートメントを使用してアルファベットを並べるいくつかのデータを持っています。私のコードはうまくいきますが、問題は非常に「遠くに」あるようです。私はこれをもっと簡単にすることができる、私が見逃している別のアプローチがあるかどうかを知りたいと思います。ここで配列/ 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

+0

を? –

+0

codereview.stackexchange.com – shmosel

+0

あなたは1つのリスト(例えば '$ list_a')または全部26を使用しますか? –

答えて

1

各文字に対して別々の配列ではなく、多次元配列を使用します。

$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>'; 
} 
+0

ありがとうございます。あなたと他の誰もが大いに助けてくれました。まだまだかなり新しいphpです。 –

関連する問題