php常用數組函數

php常用數組函數

大致需求前文以及簡單介紹過,數據表按照時間生成,每天一張,每張表大約80W+數據量,加上需要獲取多日的數據,例如獲取連續5日登陸的用戶。

需求:玩家留存率、時間可選,開始時間以及結束時間

表頭包含:新註冊用戶數量、次日留存、2日留存…30日留存

分析:

  1. 留存率公式:第N日該批用戶登錄數量/當日註冊用戶數量
  2. log表數據結構比較特殊,所有的log表字段一致,只用type去區分,字段爲id、插入時間、用戶ID、用戶名稱、type、參數1…參數20,實際參數代表的意義以及type的意思均爲代碼中常量定義。

因此如果單純用mysql語句去操作,涉及跨表、聯合、join等操作,實際測試單一一條語句均要超過6s以上,這種情況是完全無法接受的,因爲查詢時間可選,那麼就導致如果篩選多日,隨隨便便都需要等待1分鐘以上。


所以最終選擇只用mysql去做最簡單的查詢操作,包含上儘可能多的的where語句限定並group by特定的key,其餘全部使用php去操作數組完成,最後成果爲每一條獨立的sql語句耗時0.2-0.3s左右(全表無索引),包含php操作後最後輸出單日數據約1s左右,因爲此後臺只是內部使用,已基本滿足要求。


1.非常好用的Laravel內置數組輔助函數,array_pluck()

array_pluck(array $array,string $value_column_name[, string $key_column_name])

此函數可以將一個對象數組,按照你想要的方式提取出你指定的$key=>$value形式Map圖(鍵值對數組),或單純的返回一列的一維數組。

  • 第一個參數:需要提取的數組,一般用於Laravel查詢構造器返回的查詢結果數據,一個對象數組。

  • 第二個參數:需要提取的值的列名

  • 第三個參數(可選):需要提取的key的列名

例如(均爲僞代碼,只是示意用法):

原數組:
[
 {
     id:1,
     name:'hello',
 },
 {
     id:2,
     name:'hello2',
 }
]

array_pluck(array,'name');
返回:['hello','hello2']

array_pluck(array,'name','id');
返回:
array(
    "1"=>"hello",
    "2"=>"hello2"
);

2.最常用的array_filter()

具體定義可以自行查詢w3school,一個小技巧就是如果不傳入第二個func參數,則會爲數組去除空元素,需要注意的一點是任何php認爲爲空的值均會過濾掉,例如0,false,‘’等

3.可爲混合數字字串排序的sort類函數,例如:ksort()、krsort()等

此類函數均含有第二個flag參數,可以設置檢索排序模式,例如:0-5分鐘、5-10分鐘、30分鐘、60分鐘、120+分鐘,如果出現順序打亂後,只需要簡單的調用sort類函數,至於是過濾按照key還是value就需要看實際需求了,第二個參數傳入4,當做自然排序即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章