簡體   English   中英

有沒有更有效的方法來按數組分組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM