2016-02-26 93 views
0

此腳本輸出生日作爲標題和下面的客戶。因此,輸出按出生日期「分組」。如何清理這個奇怪的PHP代碼?

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>"; 

'生日'是數據庫中的日期字段。

客戶之間始終有一條線(小時),但不是在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>

回答

2

我已經決定在程序員的腦海裏看到發生了什麼太麻煩了,所以這裏有更清晰的代碼版本。該解決方案的

<?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>了!

+1

默認情況下它可能不會啓用,因此您應該提及應該爲此代碼啓用短標籤'<?='。 – Qirel