You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP一次性匹配data.txt与data.json生成指定格式输出?

问题

我有如下结构的data.json文件:

{
    "201206": "6664 SPRINT SPECTRUM, L.P.",
    "201207": "6391 CELLCO PARTNERSHIP DBA VERIZON WIRELESS - NJ",
    "201208": "4036 NEW CINGULAR WIRELESS PCS, LLC - DC",
    "201209": "9206 VERIZON NEW JERSEY, INC.",
    "201210": "7421 AT&T - LOCAL",
    "201216": "9206 VERIZON NEW JERSEY, INC.",
    "201217": "9206 VERIZON NEW JERSEY, INC.",
    "201218": "4036 NEW CINGULAR WIRELESS PCS, LLC - DC",
    "201219": "6630 USA MOBILITY WIRELESS, INC.",
    "201220": "4036 NEW CINGULAR WIRELESS PCS, LLC - DC"
}

还有包含编号列表的data.txt文件:

201206
201207
201208
201209

我需要一次性执行PHP脚本,验证data.txt中的编号是否存在于data.json中,并生成如下格式的输出:

201206@6664 SPRINT SPECTRUM, L.P.
201207@6391 CELLCO PARTNERSHIP DBA VERIZON WIRELESS - NJ
201208@4036 NEW CINGULAR WIRELESS PCS, LLC - DC
201209@9206 VERIZON NEW JERSEY, INC.

目前我用的是单GET请求加rollingcurl循环的方式,代码如下:

$list = $_GET['list'];
$data_json = json_decode(file_get_contents("data.json"), true);
$result = $data_json[''.$list.''];

请问有没有更优的一次性解决方案?


更优解决方案

完全不需要循环请求的方式,直接一次性读取两个文件并处理即可,代码如下:

// 读取并解析data.json,做错误校验
$jsonData = json_decode(file_get_contents('data.json'), true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die('data.json 文件解析失败');
}

// 读取data.txt,按行分割编号并过滤空行
$ids = array_filter(file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));

// 遍历编号生成目标格式内容
$output = [];
foreach ($ids as $id) {
    // 验证编号是否存在于JSON数据中
    if (isset($jsonData[$id])) {
        $output[] = "{$id}@{$jsonData[$id]}";
    } else {
        // 可选:对不存在的编号做自定义处理,比如跳过或标记
        // $output[] = "{$id}@编号不存在";
    }
}

// 输出最终结果,每行一条
echo implode("\n", $output);

方案优势

  • 低IO开销:仅两次文件读取操作,避免循环请求的冗余开销
  • 高效验证:通过isset()直接判断编号存在性,时间复杂度为O(1)
  • 扩展性强:可快速添加错误处理、日志记录等扩展逻辑
  • 无额外依赖:纯原生PHP实现,不需要引入curl类库

内容的提问来源于stack exchange,提问作者Thomas Edison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:54:18