php處理數據分組問題

很簡單的一個需求,將數據庫取出的二維數組進行按照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作鍵去處理數組,其中心思想是同一種。

相關文章
相關標籤/搜索