您的位置:首页 > 编程语言 > PHP开发

php常用数组函数

2017-03-25 01:23 417 查看

php常用数组函数

大致需求前文以及简单介绍过,数据表按照时间生成,每天一张,每张表大约80W+数据量,加上需要获取多日的数据,例如获取连续5日登陆的用户。

需求:玩家留存率、时间可选,开始时间以及结束时间

表头包含:新注册用户数量、次日留存、2日留存…30日留存

分析:

留存率公式:第N日该批用户登录数量/当日注册用户数量

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,当做自然排序即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: