如何基于对象特定属性统计数组?(PHP 5.3遗留系统)
可行的PHP 5.3兼容统计方案
针对你提供的包含stdClass对象的数组,由于PHP 5.3的版本限制,我们可以用最基础的foreach循环实现各类统计需求,以下是几种常见场景的具体实现:
场景1:按position统计员工人数
统计每个职位对应的员工数量:
// 初始化统计容器 $positionCount = array(); // 遍历员工数组 foreach ($employeeArray as $employee) { $pos = $employee->position; // 累计对应职位的人数 if (isset($positionCount[$pos])) { $positionCount[$pos]++; } else { $positionCount[$pos] = 1; } } // 输出统计结果 print_r($positionCount);
运行后会得到类似结果:
Array ( [POS 1] => 1 [POS 2] => 1 )
场景2:统计单个员工的各类班次天数
比如统计ID为12345的员工,其REST DAY、DAY OFF、正常班次等的天数:
// 指定目标员工ID $targetId = 12345; // 初始化统计项 $shiftStats = array( 'REST DAY' => 0, 'DAY OFF' => 0, 'WORK SHIFT' => 0, 'UNASSIGNED' => 0 ); foreach ($employeeArray as $employee) { if ($employee->ID == $targetId) { // 遍历员工对象的所有属性 foreach ($employee as $key => $value) { // 跳过非日期类属性 if (!strpos($key, '-')) { continue; } $val = trim($value); // 按班次类型分类统计 switch ($val) { case 'REST DAY': $shiftStats['REST DAY']++; break; case 'DAY OFF': $shiftStats['DAY OFF']++; break; case ' - ': $shiftStats['UNASSIGNED']++; break; default: // 匹配带时间区间的正常班次 if (strpos($val, '-')) { $shiftStats['WORK SHIFT']++; } break; } } break; // 找到目标员工后终止循环 } } print_r($shiftStats);
输出结果类似:
Array ( [REST DAY] => 2 [DAY OFF] => 1 [WORK SHIFT] => 7 [UNASSIGNED] => 4 )
场景3:全局统计所有员工的各类班次总数
统计所有员工的REST DAY、DAY OFF等总天数:
$globalStats = array( 'REST DAY' => 0, 'DAY OFF' => 0, 'WORK SHIFT' => 0, 'UNASSIGNED' => 0 ); foreach ($employeeArray as $employee) { foreach ($employee as $key => $value) { // 只处理日期属性 if (!strpos($key, '-')) { continue; } $val = trim($value); if ($val == 'REST DAY') { $globalStats['REST DAY']++; } elseif ($val == 'DAY OFF') { $globalStats['DAY OFF']++; } elseif ($val == ' - ') { $globalStats['UNASSIGNED']++; } elseif (strpos($val, '-')) { $globalStats['WORK SHIFT']++; } } } print_r($globalStats);
注意事项
- PHP 5.3中访问
stdClass对象属性直接使用->语法即可,无需额外处理 - 日期属性的判断用
strpos($key, '-')做简单识别,若需更严格的日期格式校验,可替换为正则表达式:preg_match('/^\d{4}-\d{2}-\d{2}$/', $key) - 所有代码均兼容PHP 5.3,无需依赖高版本函数
内容的提问来源于stack exchange,提问作者Bernard Gresola
相关产品推荐
相关产品推荐

