2017-08-01 43 views
1

我得到了$ users var(2d數組)。 $用戶內部的每個陣列都是這樣的:循環數組,結果與視覺分隔的div塊的日期相同

Name | Username | BirthDay 

並被過濾爲「ORDER BY BirthDay」。

我需要輸出用戶格式:

------ January 15, 2017 ------- 
Jerry Brown 
Angel Keaton 
------ January 25, 2017 ------- 
Kelly Jones 
Derrick Wang 
Kate Bosch 
... 

意味着出生的同一日期的用戶在一個單一的「托架」被分組並且通過日期分隔符分隔(------ 1月15日,2017 -------)。每個「括號」中的用戶數量可能每次都不相同。

我目前可以實現輸出:

------ January 15, 2017 ------- 
    Jerry Brown 
    ------ January 15, 2017 ------- 
    Angel Keaton 
    ------ January 25, 2017 ------- 
    Kelly Jones 
    ------ January 25, 2017 ------- 
    Derrick Wang 

或其他不相關的結果,這是不是真實需要相當的東西。感謝您的任何建議!

回答

1

在我看來,一個很好的方式來顯示你的查詢數據這樣的組是這樣的,當你從查詢結果中提取行時創建一個分組數據結構。你現在正在做的方式可能是這樣的

while ($row = $result->fetch_assoc()) { 
    $users[] = $row; 
} 

這將讓你的平板陣列,你現在有。

如果您使用日期作爲關鍵字將結果提取到多維數組中,那麼數據將更加適合以羣組形式顯示,就像您正在嘗試執行的那樣。

while ($row = $result->fetch_assoc()) { 
    $users[$row['birthday']][] = $row; 
} 

這將讓你的數組像這樣代替:

$users = [ 
    'January 15, 2017' => [ 
     ['name' => 'Jerry Brown', 'birthday' => 'January 15, 2017'], 
     ['name' => 'Angel Keaton', 'birthday' => 'January 15, 2017'], 
    ], 
    'January 25, 2017' => [ 
     ['name' => 'Kelly Jones', 'birthday' => 'January 25, 2017'], 
     ['name' => 'Derrick Wang', 'birthday' => 'January 25, 2017'], 
     ['name' => 'Kate Bosch', 'birthday' => 'January 25, 2017'], 
    ] 
]; 

,你可以很容易地嵌套循環來輸出你想要的格式進行迭代。

foreach ($users as $date => $people) { 
    echo "<div>------ $date ------<br>"; 
    foreach ($people as $person) { 
     echo "$person[name]<br>"; 
    } 
    echo "</div>"; 
} 
+0

謝謝 - 一直感覺,這正是它應該怎麼做一路(即reshufle「扁平化」陣列到合適的結構第一,而然後用一堆不需要的變量/條件做一個循環),但我自己無法完成。你做了我的一天 - 再次感謝你!附:抱歉,由於名譽限制,無法提供贊成票。 – Zerus

+0

不客氣! –

0

保存在變量的最後日期和檢查下一次迭代,如果更改日期,關閉div和創建一個新的。

例,產生準確的輸出你想要的:

$previous = NULL; 
$first = true; 

echo '<div class="birthday-users">' . PHP_EOL; 
foreach ($users as $user) { 
    $timestamp = strtotime($user["birthday"]); 
    $headline = date("F d, Y", $timestamp); 

    if ($previous !== $headline) { 
     if (!$first) { 
      echo '</div>' . PHP_EOL . '<div class="birthday-users">' . PHP_EOL; 
     } 

     echo '<h1>------ ' . $headline . ' -------</h1>' . PHP_EOL; 

     $previous = $headline; 

     if ($first) { 
      $first = false; 
     } 
    } 

    echo '<p>' . $user["name"] . '</p>' . PHP_EOL; 
} 
echo '</div>';