linux脚本年龄计算,两种用户年龄段统计的方法

第一种方法:

优点: 1.代码量少; 2.可以自定义年龄段;

缺点: 1.相对于第二种方法,代码不易读懂; 2.效率差一丁点,一万条数据,比第二种方法慢了0.002秒左右 private function computeData($members)

{

if (empty($members)) {

return false;

}

$currentYear = date('Y');

$static = [];

foreach ($members as $member) {

$sex = $member['sex']; // 会员性别

$level = $member['level']; // 会员等级

preg_match('/^(\d{4})-/', $member['birthday'], $matches);

if (empty($matches) || !isset($matches[1])) {

if (!isset($static['other'][$sex][$level])) {

$static['other'][$sex][$level] = 1;

continue;

}

$static['other'][$sex][$level]++;

continue;

}

$birthday = $matches[1];

$age = $currentYear - $birthday; // 计算当前会员年龄

// 此处可以设置一个参数,进行年龄段的自定义

$ages = [0, 20, 25, 30, 35, 40, 45]; // 列出统计的年龄段

$ages[] = $age; // 将当前会员的年龄存入年龄段数组中

sort($ages); // 排序

$key = array_search($age, $ages); // 查找当前会员年龄所处位置的索引

$index = $key - 1; // 索引 减 1,得到所属的年龄段

$index = $index > 0 ? $index : 0; // 如果是负数,则取零,作为该会员所属的年龄段

$age = $ages[$index] > 0 ? $ages[$index] : 0; // 会员所属的年龄段

// 统计该年龄段中,各个等级的会员数量

$static[$age][$sex][$level] = isset($static[$age][$sex][$level]) ? ++$static[$age][$sex][$level] : 1;

return $static;

}

第二种方法:

优点: 1.代码易懂; 2.相对于第一种方法,效率高;

缺点: 1.代码多了不少; 2.无法自定义年龄段; private function computeData($members)

{

if (empty($members)) {

return false;

}

$currentYear = date('Y');

$static = [];

foreach ($members as $member) {

$sex = $member['sex']; // 会员性别

$level = $member['level']; // 会员等级

preg_match('/^(\d{4})-/', $member['birthday'], $matches);

if (empty($matches) || !isset($matches[1])) {

if (!isset($static['other'][$sex][$level])) {

$static['other'][$sex][$level] = 1;

continue;

}

$static['other'][$sex][$level]++;

continue;

}

$birthday = $matches[1];

$age = $currentYear - $birthday; // 计算当前会员年龄

switch ($age){

case $age > 45 :

$static[45][$sex][$level] = isset($static[45][$sex][$level]) ? ++$static[45][$sex][$level] : 1;

break;

case $age > 40 :

$static[40][$sex][$level] = isset($static[40][$sex][$level]) ? ++$static[40][$sex][$level] : 1;

break;

case $age > 35 :

$static[35][$sex][$level] = isset($static[35][$sex][$level]) ? ++$static[35][$sex][$level] : 1;

break;

case $age > 30 :

$static[30][$sex][$level] = isset($static[30][$sex][$level]) ? ++$static[30][$sex][$level] : 1;

break;

case $age > 25 :

$static[25][$sex][$level] = isset($static[25][$sex][$level]) ? ++$static[25][$sex][$level] : 1;

break;

case $age > 20 :

$static[20][$sex][$level] = isset($static[20][$sex][$level]) ? ++$static[20][$sex][$level] : 1;

break;

default:

$static[0][$sex][$level] = isset($static[0][$sex][$level]) ? ++$static[0][$sex][$level] : 1;

}

}

return $static;

}

个人喜好简洁的代码,虽然第一种方法没有第二种方法的代码易读,但是代码量少了很多;

但是最终测试的结果,第二种方式在效率上更好,觉得选第二种好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值