1

私は現在、カテゴリと呼ばれる配列内の項目に基づいて、配列を html テーブルにグループ化するという問題に取り組んでいます。

次のコードがあります。

foreach ($this->items as $item) {
    $categories[] = $item->category;
}

<?php foreach ($categories as $category): ?>
        <table class="table table-bordered">
        <?php foreach ($this->items as $item) :?>
            <tr>
                <td></td>
                <td><?php echo $item->description; ?></td>
                <td><?php echo $item->price; ?></td>
            </tr>
        <?php endforeach; ?>
        </table> 
    <?php endforeach; ?>

しかし、そのカテゴリに基づいて、テーブルに移動するか、そのカテゴリのテーブルを作成する必要があることをどのように伝えますか?

個別のカテゴリごとの最終結果は次のようになります。

ここに画像の説明を入力

説明の追加:

私はそれを修正したと思います..私はこのコードを使用しました:

foreach( $this->items as $item ){
if( !isset( $zones[ $item->zone ] ) )
$zone_items[ $item->zone] = array();
$zone_items[ $item->zone ][] = $item;

    $zones[$item->zone] = array(
        'zone' => $item->zone,
        'zone_description' => $item->zone_description,
        'items' => $zone_items[$item->zone]
    );

}


<?php foreach( $zones as $zone): ?>
    <?php echo $zone['zone']; ?><br />
    <?php echo $zone['zone_description']; ?>

    <?php foreach( $zone['items'] as $items ) :?>
        <?php echo $items->name; ?>
        <?php echo $items->description; ?>
        <?php echo $items->category; ?>
    <?php endforeach; ?>

<?php endforeach; ?>

名前と説明は表示されますが、アイテムは表示されません。

4

2 に答える 2

0
$categories = [];

foreach( $this->items as $item )
{
    $categories[$item->category][] = $item;
}

$categoriesこれで、各インデックスがカテゴリであり、そのカテゴリのアイテムを含む連想配列が得られます。これを foreach でループし、$categoryインデックスを出力し、そこに含まれるオブジェクトを出力します。

于 2013-08-15T09:46:00.247 に答える
0

これはどう?私はそれをテストしなかったので、バグを許してください:) 私の例のテーブルも厄介です、うーん...ここから正しく取得するには、少しいじる必要があります;P

$categories = array();
foreach( $this->items as $item )
{
    if( !isset( $categories[ $item->category ] ) ) $categories[ $item->category] = array();
    $categories[ $item->category ][] = $item;
}

<?php foreach( $categories as $category => $items ): ?>
    <table class="table table-bordered">
        <tr>
            <td rowspan="<?php echo count( $items ); ?>"><?php echo $category; ?></td>
            <?php foreach( $items as $item ) :?>
                <td><?php echo $item->description; ?></td>
                <td><?php echo $item->price; ?></td>
            <?php endforeach; ?>
        </tr>
    </table>
<?php endforeach; ?>

カテゴリの説明を含めるには、配列を作り直す必要があります。さて、あなたのカテゴリの説明がどこから来ているのかわからないので、配列と出力がどのように見えるべきかを示すだけにして、それをどのように構築するかはあなたに任せます。

<?php
$categories = array(
    array(
        'name' => 'Category Name',
        'description' => 'This is the category description',
        'items' => $itemsForThisCategory //you can still sort the items by category like I did above and then do "$itemsSortedByCategory[ 'Category Name' ]" here
    ),
    array(
        'name' => 'Another Category Name',
        'description' => 'This is the description for another category',
        'items' => $itemsForAnotherCategory
    ),
    //etc... as many categories as you have
);
?>

出力は次のようになります。

<?php foreach( $categories as $category ): ?>
    <table class="table table-bordered">
        <tr>
            <td rowspan="<?php echo count( $category['items'] ); ?>">
                <?php echo $category['name']; ?><br />
                <?php echo $category['description']; ?>
            </td>
            <?php foreach( $category['items'] as $item ) :?>
                <td><?php echo $item->description; ?></td>
                <td><?php echo $item->price; ?></td>
            <?php endforeach; ?>
        </tr>
    </table>
<?php endforeach; ?>
于 2013-08-15T09:47:07.767 に答える