نمایش بدون تکرار مقادیر یک فیلد خاص در جداول


ارسال در تاریخ ۱۴ مهر,۱۳۹۷



یک کوئری داریم که اطلاعاتی از دیتابیس را برای ما برگشت می دهد. می خواهیم زمانی که این اطلاعات را در جدول نمایش می دهیم. مقادیر تکراری ستون make که زیر هم قرار دارند برای راحت تر خوانده شدن فقط یک بار در جدول نوشته شوند. در تصویر زیر جدول اصلی را مشاهده می کنید.

ما می خواهیم که نتیجه بصورت زیر باشد:

کد مروبط به تصویر اول بصورت زیر هست:

<table class="table">
    <thead class="thead-dark">
    <tr>
        <th scope="col">Make</th>
        <th scope="col">Price</th>
        <th scope="col">Description</th>
    </tr>
    </thead>
    <tbody>

    <?php foreach ($result as $row): ?>
        <tr>
            <td><?= $row['make'] ?></td>   
            <td><?= $row['price'] ?></td>
            <td><?= $row['description'] ?></td>
        </tr>
    <?php endforeach; ?>
    </tbody>
</table>

در متغیر $result نتیجه کوئری select اطلاعات از جدول cars را ذخیره کرده ایم و در یک حلقه foreach این مقادیر را در یک جدول html چاپ کرده ایم. همانطور که گفته شد می خواهیم مقادیر مربوط به ستون make که زیر هم قرار دارند فقط یک بار نوشته شوند. برای این کار از یک متغیر کمکی استفاده می کنیم که هر بار حاوی مقدار قبلی ستون make هست و این مقدار را با مقدار جاری مقایسه می کنیم و اگر برابر بودند از چاپ این مقدار جاری خودداری می کنیم.

کد بصورت زیر می باشد:

<table class="table">
    <thead class="thead-dark">
    <tr>
        <th scope="col">Make</th>
        <th scope="col">Price</th>
        <th scope="col">Description</th>
    </tr>
    </thead>
    <tbody>

    <?php
        $previous = "";
        foreach ($result as $row): ?>
        <tr>
            <?php
                if($row['make'] != $previous) {
                    echo '<td>'.$row['make'].'</td>';
                }else{
                    echo '<td class="borderless">&nbsp</td>';
                }
            ?>
            <td><?= $row['price'] ?></td>
            <td><?= $row['description'] ?></td>
        </tr>
    <?php
        $previous = $row['make'];
        endforeach; ?>
    </tbody>
</table>

متغیر $previous هر دفعه حاوی مقدار قبلی فیلد make هست و در زمان چاپ کردن مقدار فیلد make این مقایسه را بین متغیر $previous و فیلد make انجام می دهیم. اگر برابر نبودند که مقدار فیلد make را چاپ می کنیم و اگر برابر بودند یک td با کلاس borderless اضافه می کنیم که داخل آن کاراکتر space در html یعنی $nbsp قرار دارد.

استایل کلاس borderless هم بصورت زیر می باشد.

.borderless {border:none;}

برای ارسال نظر لطفا وارد شوید.