php處理數據分組問題


很簡單的一個需求,將數據庫取出的二維數組進行按照id分組,同組的數據用逗號連接,例如:

處理為

就是按照id分組,name進行逗號拼接。

那么按照數據庫的思路來說,采用group_concat即可,如果有重復,可使用group_concat(distinct 字段) 即可。(這是有風險的,當數據量足夠多的時候會超出group_concat的極限,到時候出現數據截斷)

對於PHP而言,可以用很多種方式處理,網友們給出他的解法千奇百怪,但是效率都不是太高,雙重循環解決問題可讀性也不好,下面我總結幾種自己考慮出來的方式。

解法1:

先循環一次以id做鍵,處理為數組,然后再次循環,將name下面的數組轉字符串。復雜度:≤2n

解法2:

減少第二次循環,直接用拼接解決

 

 這個做了isset判斷,如果有則拼接,如果沒有,則賦值,按道理說這里已經完成了,后面用array_values是為了將數組轉為索引數組。復雜度:n+array_values函數調用一次

解法3:

去掉array_values處理最后的數組索引問題,直接一步到位索引。

這里采用i自增方法,做鍵值對映射到hash中去,直接明確了索引元素的位置,直接賦值,但是測試發現,這個執行時間的效率並沒有array_values高,可能是array_values底層采用c語言編寫,這個數組索引賦值等過程的操作可能有些緩慢,這也可能和內存有關,空間換時間,提高重置索引效率。復雜度:n

總之,這幾個辦法都已經是很簡便的快捷辦法了,最大限度的利用id進行分組索引化,讓id做鍵去處理數組,其中心思想是同一種。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM