很簡單的一個需求,將數據庫取出的二維數組進行按照id分組,同組的數據用逗號鏈接,例如:數據庫
處理爲數組
就是按照id分組,name進行逗號拼接。函數
那麼按照數據庫的思路來講,採用group_concat便可,若是有重複,可以使用group_concat(distinct 字段) 便可。(這是有風險的,當數據量足夠多的時候會超出group_concat的極限,到時候出現數據截斷)測試
對於PHP而言,能夠用不少種方式處理,網友們給出他的解法千奇百怪,可是效率都不是過高,雙重循環解決問題可讀性也很差,下面我總結幾種本身考慮出來的方式。3d
解法1:blog
先循環一次以id作鍵,處理爲數組,而後再次循環,將name下面的數組轉字符串。複雜度:≤2n索引
解法2:內存
減小第二次循環,直接用拼接解決字符串
這個作了isset判斷,若是有則拼接,若是沒有,則賦值,按道理說這裏已經完成了,後面用array_values是爲了將數組轉爲索引數組。複雜度:n+array_values函數調用一次hash
解法3:
去掉array_values處理最後的數組索引問題,直接一步到位索引。
這裏採用i自增方法,作鍵值對映射到hash中去,直接明確了索引元素的位置,直接賦值,可是測試發現,這個執行時間的效率並無array_values高,多是array_values底層採用c語言編寫,這個數組索引賦值等過程的操做可能有些緩慢,這也可能和內存有關,空間換時間,提升重置索引效率。複雜度:n
總之,這幾個辦法都已是很簡便的快捷辦法了,最大限度的利用id進行分組索引化,讓id作鍵去處理數組,其中心思想是同一種。