0

私はこの問題を解決しようとしており、多くの解決策を見つけましたが、まだ作業に取り掛かることができません。私はコードに非常に不満を感じており、まとめてまとめて一度に機能させるのではなく、段階的に実行するだけだと思います。

現在、私のテーブルは次のとおりです。

categories | name
fashion    | chanel
fashion    | prada
cafes      | starbucks
cafes      | tcc
dining     | kfc
dining     | macdonalds

私が達成したいことは

1) Echo-ing out the categories <h1>fashion</h1> with once instead of duplicating and <ul> if it is starting on a new category

2) Echo-ing out all the <li>name</li> no matter how many of names are under that fashion

3) Echo-ing out </ul> if it is the last name in that fashion

残りのカテゴリについても同様です。これは現在、私の心が考えていることであり、これが実際的かどうかはわかりません。

私はこの方法を使ってみました:

$result = mysqli_query($con,"SELECT * FROM floor_directory WHERE level='$level' ORDER BY categories");
while($row = mysqli_fetch_array($result)){
                if($previousVal != $row['categories']){
                     $data .= '<h1>'.$row['categories'].'</h1><ul class="shop_listing">';
                     $previousVal = $row['categories'];
                }
                 $data .= '<li>
                           <p class="float_left">'.$row['name'].'</p>
                           </li></ul>';
            }

私が知っているのは、li と終了 ul のループに何か問題があることです。これは私が非常に長い間立ち往生していて、どこにも解決策を見つけることができない場所です. 私が何をしても、さまざまなカテゴリに対して foreach を実行しても、そうでなければ、まだどこにも近づきません。

私が得る結果は次のいずれかです:

<h1>fashion</h1>
<ul class="shop_listing">
<li><p>chanel</p></li>
</ul>
<li><p>prada</p></li>

<h1>dining</h1>
<ul class="shop_listing">
<li><p>kfc</p></li>
</ul>
<li><p>macdonald</p></li>

または:

<h1>fashion</h1>
<ul class="shop_listing">
<li><p>chanel</p></li>
<li><p>prada</p></li>

<h1>dining</h1>
<ul class="shop_listing">
<li><p>kfc</p></li>
<li><p>macdonald</p></li>
</ul>
</ul>

皆さんが私を助けてくれることを願っています。リンクを貼ってコメントしただけの人は、ここに回答を入力しないでください。私はそれを必要としません。私はすでに非常に混乱しており、これについては初心者です。私のコードが機能しない理由と、与えられた解決策が機能する理由を誰かが案内したり、説明したりしてくれるとうれしいです。前もって感謝します!

4

2 に答える 2

2

これを行う 1 つの方法は、 your をキーとして使用して新しい配列を作成し、categoryそのカテゴリに属する​​すべての名前をその中の配列に入れることです。新しい配列をループして、HTML を作成します。

PHP

$temp_array=array();//temporary array

$result = mysqli_query($con,"SELECT * FROM floor_directory WHERE level='$level' ORDER BY categories");

while($row = mysqli_fetch_array($result)){
    $temp_array[$row['categories']][]=$row['name'];//put data into temporary array
}

foreach($temp_array AS $category=>$names){
    $data.='<h1>'.$category.'</h1><ul class="shop_listing">';
    foreach($names AS $name){
        $data.='<li>
               <p class="float_left">'.$name.'</p>
               </li>';
    }
    $data.='<ul>';
}

テストされていませんが、必要なことを行う必要があります。

于 2013-11-07T08:46:28.893 に答える
1

これを試して

$result = mysqli_query($con,"SELECT * FROM floor_directory WHERE level='$level' ORDER BY 

    categories");
    while($row = mysqli_fetch_array($result)){
                    if($previousVal != $row['categories']){
                         if($data) {
                               $data .= "</ul>";
                         }
                         $data .= '<h1>'.$row['categories'].'</h1><ul class="shop_listing">';
                         $previousVal = $row['categories'];
                    }
                     $data .= '<li>


                     <p class="float_left">'.$row['name'].'</p>
                                   </li>';
                    }
$data .= "</ul>";
于 2013-11-07T08:50:10.913 に答える