如何用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
相关产品推荐
相关产品推荐

