如何清理这个奇怪的PHP代码


How to clean up this strange PHP code?

此脚本将生日作为标题输出,并在下面输出客户。

因此,输出按出生日期"分组"。

echo "<div>";
foreach(pdo_query("SELECT customer, birthday FROM table ORDER BY birthday ASC", array($empty)) as $row)
    {
        if(!isset($birthday) or $birthday != $row['birthday'])
            {
                unset($drawline);
                echo "</div>";
                echo "<div class=title><h1>".$row['birthday']."</h1></div><div class=customer>";
            }
        if(isset($drawline)){echo "<hr>";}
        echo $row['customer']."<br>";
        $drawline = 1;
        $birthday = $row['birthday'];
    }
echo "</div>";

"生日"是数据库中的日期字段。

客户

之间总是有一条线(hr),但不是在d.o.b的最后一个客户之后。

示例输出:

<div class=title><h1>1986-10-08</h1></div>
<div class=customer>
Don Foo<br>
<hr>
Joe Bar<br>
</div>
<div class=title><h1>1988-03-18</h1></div>
<div class=customer>
Jane Fonda<br>
<hr>
Elvis Burns<br>
</div>

是否可以在foreach()外移除<div></div>

它总是产生一个空的<div></div>

我已经决定在程序员的脑海中看到这里发生了什么太麻烦了,所以这里有更干净的代码版本。

<?php
$people = pdo_query("SELECT customer, birthday FROM table ORDER BY birthday ASC", array($empty));
if (!empty($people)) {
// Find out people with the same birthday and group them.
$birthdays = [];
foreach ($people as $man) {
    $birthday = $man['birthday'];
        if (empty($birthdays[$birthday])) {
            $birthdays[$birthday] = [];
        }
        $birthdays[$birthday][] = $man['customer'];
    }
// Now let's output everything!
?>
<div>
<?php foreach ($birthdays as $birthday => $customers): ?>
    <div class=title><h1><?= $birthday ?></h1></div>
    <div class="customer">
        <?= implode('<br><hr>', $customers) ?>
    </div>
<?php endforeach;?>
</div>
<?php } // endif (!empty($people)) ?>

这个解决方案的要点 - 非常简单易懂,使用了一些模板(你可以为这个小片段创建一个),易于调试和修改。是的,它不再输出空<div></div>