
本文介绍如何通过 curl 请求获取字符串格式的键值对数据,解析其中的 age 字段,并准确统计 age ≥ 50 的条目数量,包含正则提取、数值过滤与健壮性处理。
本文介绍如何通过 curl 请求获取字符串格式的键值对数据,解析其中的 age 字段,并准确统计 age ≥ 50 的条目数量,包含正则提取、数值过滤与健壮性处理。
在实际开发中,我们常需通过 API 接口(如 cURL)获取结构松散的文本型数据——例如以 key=xxx, age=nn 形式拼接的字符串。本例中,接口返回 JSON,其 data 字段为纯文本,需从中提取所有 age= 后的整数值,并统计 ≥ 50 的个数。
以下是一个完整、可直接运行的解决方案:
<?php // 1. 发起 cURL 请求
$ch = curl_init('url here'); // 替换为真实 URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$data = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 2. 检查请求是否成功
if ($data === false || $httpCode !== 200) {
die("cURL 请求失败或 HTTP 状态码异常({$httpCode})");
}
// 3. 解析 JSON,获取 data 字符串
$response = json_decode($data, true);
if (json_last_error() !== JSON_ERROR_NONE || !isset($response['data'])) {
die("JSON 解析失败或缺少 'data' 字段");
}
$dataString = trim($response['data']);
// 4. 使用正则匹配所有 age=数字(支持多位数),并过滤 ≥ 50 的值
$ageCount = 0;
if (preg_match_all('/age=(\d+)/', $dataString, $matches)) {
$ages = array_map('intval', $matches[1]); // 转为整型,避免字符串比较
$ageCount = count(array_filter($ages, function($age) {
return $age >= 50;
}));
}
echo $ageCount; // 输出示例:14(根据你提供的数据实际为 14 个 ≥50 的 age)
?>
✅ 关键说明:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
- 正则
/age=(\d+)/精准捕获age=后的连续数字,兼容age=5、age=100等任意位数; -
array_map('intval', ...)确保数值比较安全,避免'050'等前导零导致的隐式类型问题; - 添加了 HTTP 状态码和 JSON 解析校验,提升代码鲁棒性;
- 不依赖
key字段,仅关注age,符合需求本质。
⚠️ 注意事项:
- 若原始数据中
age值含空格(如age= 58),建议先str_replace(' ', '', $dataString)清理; - 如数据量极大(万级),正则仍高效;但若长期维护,建议推动接口方改用标准 JSON 数组格式(如
[{"key":"IAfpK","age":58},...]),便于直接json_decode和array_filter处理; - 生产环境请启用错误报告(
error_reporting(E_ALL))并记录日志,便于排查网络或解析异常。
该方案简洁、可靠,兼顾可读性与工程实践要求,适用于各类类似“文本嵌套键值对”的解析场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










