我還在學習PHP,並開始瞭解foreach()循環的工作。我被困在某些東西上。PHP foreach每個級別的變量元素嵌套列表?
我正在從MySQL數據庫中使用PHP繪圖,並且我想列出有多少項共享相同的「topic_id」。使用初始數字,我試圖製作一個嵌套列表,用於標識每個項目可用的不同媒體類型,以及每個媒體中統計的項目數。
這是我使用的數據庫查詢:
SELECT
m.name AS medium, i.medium_id, f.name AS format,
SUM(
CASE WHEN it.topic_id = '$topicId' AND i.id = it.item_id
THEN 1
ELSE 0 END
) AS sumFormat
FROM items AS i
LEFT JOIN item_topics AS it
ON i.id = it.item_id
LEFT JOIN formats AS f
ON f.id = i.format_id
LEFT JOIN media AS m
ON m.id = i.medium_id
GROUP BY medium, format
ORDER BY medium ASC
此給出以下結果(我省略sumFormat = 0的結果):
+--------------+-------------+--------------+-----------+
| medium | medium_id | format | sumFormat |
+--------------+-------------+--------------+-----------+
| Games | 1 | NULL | 1 |
| Magazines | 2 | Paperback | 35 |
| Albums | 3 | CD | 25 |
| Albums | 3 | Record | 1 |
| Books | 5 | Audiobook | 38 |
| Books | 5 | Diary | 1 |
| Books | 5 | Dictionary | 4 |
| Books | 5 | Ebook | 421 |
| Books | 5 | Hardback | 76 |
| Books | 5 | Paperback | 574 |
| Comics | 6 | Paperback | 2 |
+--------------+-------------+--------------+-----------+
根據「$ topicId 「被查詢時,結果會有所不同 - 在某些情況下,在給定的介質或格式中可能沒有任何項目。我希望PHP代碼能夠處理這個問題,因此只有列出了「topic_id」的媒體類型和格式。
在我的PHP代碼,我已經把它在一起,就像這樣:
<ul id="formats">
<?php foreach ($topicFormats as $topicFormat): ?>
<?php if ($topicFormat['medium'] && $topicFormat['sumFormat']): ?>
<li><?= $topicFormat['medium'] ?></li>
<?php if ($topicFormat['sumFormat']): ?>
<ul>
<li><?= $topicFormat['sumFormat'] ?>
<?php if (!$topicFormat['format']): ?>
Games
<?php else: ?><?= $topicFormat['format'] ?>
<?php endif; ?>
</li>
</ul>
<?php endif; ?>
<?php endif; ?>
<?php endforeach; ?>
最終的HTML看起來像這樣:
1178 Items
• Games
• 1 Games
• Magazines
• 35 Paperback
• Albums
• 1 Record
• Albums
• 25 CD
• Books
• 38 Audiobook
• Books
• 1 Diary
• Books
• 4 Dictionary
• Books
• 421 Ebook
• Books
• 76 Hardback
• Books
• 574 Paperback
• Comics
• 2 Paperback
但是我想的結果如下:
1178 Items
• Games
• 1 Games
• Magazines
• 35 Paperback
• Albums
• 1 Record
• 25 CD
• Books
• 38 Audiobook
• 1 Diary
• 4 Dictionary
• 421 Ebook
• 76 Hardback
• 574 Paperback
• Comics
• 2 Paperback
我在StackOverFlow上檢查過這個問題,但沒有找到任何解決方案。 任何幫助,將不勝感激!
編輯:我還沒有機會嘗試一下你的任何建議還,但在回答Kapilgopinath,這裏是合成陣列(我認爲這是你問的 - 我「已經從未檢索到的結果排列):
Array
(
[0] => Games
[medium] => Games
[1] => 1
[medium_id] => 1
[2] =>
[format] =>
[3] => 1
[sumFormat] => 1
)
(‘遊戲’沒有的格式,所以它返回null - 這將是其中其它介質類型將列出‘平裝本’,‘CD’!等)
因此,介質應該是脫離主要的foreach塊 –
@RakeshSharma hoq這將有助於?! –
如果介質的值發生變化,我只會在循環中輸出ul標籤。 – Kickstart