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,当做自然排序即可

你可能感兴趣的:(php,---php基础,laravel)