[英]Is there a more efficient way to group this by array?
我在一個while循環中,從數據庫中收集標題和附帶的數組以及組。
我的數據如下所示(請注意,我需要更多字段,但是為了簡單起見,我僅顯示兩個):
**Title** | **Groups**
Random Title One | array(Group A)
Another Title | array(Group A, Group B, Group C, Group D, Group E)
我正在用while循環遍歷每一行。 現在,我想按組顯示。 像這樣:
Group A: Random Title One, Another Title
Group B: Another Title
Group C: Another Title
Group D: Another Title
Group E: Another Title
我認為處理此問題的最佳方法是在while循環內通過組使用foreach循環。 看起來像這樣:
<?php
foreach ($arrayGroups as $group) {
switch ($group) {
case "Group A":
$arrGroupA[]['title'] = $title;
break;
case "Group B":
$arrGroupB[]['title'] = $title;
break;
case "Group C":
$arrGroupC[]['title'] = $title;
break;
case "Group D":
$arrGroupD[]['title'] = $title;
break;
case "Group E":
$arrGroupE[]['title'] = $title;
break;
}
}
?>
但是,即使我知道不超過五個小組,我也不喜歡這種方式,並且懷疑這是否是最好的方式。
有任何想法嗎?
您可以嘗試將它們放在單個數組中,例如:
foreach ($arrayGroups as $group) {
$groups[$group][] = array(
'title' => $title,
);
}
這樣,您可以使用$groups[groupName][some index]['title']
訪問它們
雖然不確定是否可以使用更快的性能,但是它允許您自動輸入可變數量的組。
如果您知道結果總是會井然有序,那么可以說
array(Group A, Group B, Group C, Group D, Group E)
要么
array(Group A, Group D, Group E)
等等
您可以通過不每次都執行所有比較來提高效率。 換句話說,如果您位於記錄數組的第二個組中,則不要進行“ A組”比較,因為“ A組”總是會首先出現。 當像開關中的“ break”正在執行匹配時,您仍然希望“短路”。
這是一些類似Java的偽代碼,對不起,我不是php專家:
//traverse all groups for the current record
for (int i=0; i<currentRecordGroups.length; i++) {
// traverse the possible groups, starting with the index of the
// current group from the current record (allGroups must also be sorted)
for(int j = i; j<allGroups.length; j++) {
if(currentRecordGroups[i] == allGroups[j]) {
// add the title to the collection for group allGroups[j] here...
break; //break for j
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.