PHP中如何提取年龄并统计大于50的数量?
问题
需求:从给定数据中提取所有age字段值,统计其中大于50的数量,预期结果为2。
给定数据:
$data = '{"data":"key=IAfpK, age=58, key=WNVdi, age=64, key=jp9zt, age=47"}';
我尝试的代码如下:
$array = json_decode($data, true); $strArray = explode(',', $array['data']); $temp1 = array(); for($i=0; $i < count($strArray); $i++){ $key_value = explode('=', $strArray[$i]); $temp1[$i][$key_value[0]] = $key_value[1]; } print "<pre>"; print_r($temp1); print "</pre>";
当前输出为:
Array ( [0] => Array ( [key] => IAfpK ) [1] => Array ( [ age] => 58 ) [2] => Array ( [ key] => WNVdi ) [3] => Array ( [ age] => 64 ) [4] => Array ( [ key] => jp9zt ) [5] => Array ( [ age] => 47 ) )
我需要将所有年龄整理到一个数组中以便进行比较。
解决方案
核心问题是分割后的键名带有空格(比如[ age]),导致无法统一提取年龄值。可以通过以下步骤优化代码:
- 清理键名的空格:处理每个键值对时,先用
trim()去掉前后空格,再分割键和值。 - 筛选并收集年龄值:判断键是否为
age,若是则将值转为整数存入年龄数组。 - 统计大于50的数量:遍历年龄数组,统计符合条件的元素个数。
优化后的代码:
$data = '{"data":"key=IAfpK, age=58, key=WNVdi, age=64, key=jp9zt, age=47"}'; $array = json_decode($data, true); $strArray = explode(',', $array['data']); $ages = []; foreach ($strArray as $item) { // 去除前后空格,再分割键值 list($key, $value) = explode('=', trim($item)); $key = trim($key); // 确保键名无空格 if ($key === 'age') { $ages[] = (int)$value; // 转为整数便于比较 } } // 统计大于50的年龄数量 $count = 0; foreach ($ages as $age) { if ($age > 50) { $count++; } } print "<pre>"; print_r($ages); // 输出整理后的年龄数组 echo "大于50的年龄数量:" . $count; print "</pre>";
执行后输出:
Array ( [0] => 58 [1] => 64 [2] => 47 ) 大于50的年龄数量:2
也可以用更简洁的方式,结合array_filter统计数量:
// 统计部分替换为: $count = count(array_filter($ages, function($age) { return $age > 50; }));
内容的提问来源于stack exchange,提问作者user2159616
相关产品推荐
相关产品推荐

