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

如何将TXT文件名列表转为PHP数组以合并JSON文件

如何将字符串格式的文件名列表转为PHP数组用于合并JSON文件?

我明白你的问题了——你现在的问题出在把整个字符串当成了数组的单个元素,而不是把字符串里的每个文件名拆成数组的独立项。让我给你拆解一下问题原因,再给你修正后的代码:

问题根源

你用$urls = array($items)的时候,$items是一个完整的字符串:'1.json','2.json','3.json',所以最终$urls数组里只有一个元素,就是这个长字符串。当你foreach循环去读取这个"文件名"时,系统找不到名为'1.json','2.json','3.json'的文件,自然json_decode返回null,最后输出的结果就是null。

解决方案:把字符串解析为数组

我们需要把这个带单引号和逗号的字符串,转换成真正的文件名数组。最安全的方式是用字符串处理函数(避免用eval,因为有安全风险):

修正后的完整代码

// 读取items.txt内容并合并换行
$fileLines = explode("\n", file_get_contents('items.txt'));
$itemsString = implode($fileLines); 

// 关键步骤:将字符串转为真实的文件名数组
// 1. 移除所有单引号
$cleanedString = str_replace("'", "", $itemsString);
// 2. 按逗号分割成单个文件名
$urls = explode(',', $cleanedString);
// 3. 去除每个文件名的前后空白(比如换行符、多余空格)
$urls = array_map('trim', $urls);

$jobs = [];
foreach ($urls as $url){
    // 增加文件存在判断,避免报错
    if (file_exists($url)) {
        $jsonContent = file_get_contents($url);
        $json = json_decode($jsonContent, true);
        // 确保JSON解析成功才加入数组
        if ($json !== null) {
            $jobs[] = $json;
        }
    }
}

// 合并所有JSON数据
$mergedData = [];
foreach ($jobs as $piece) {
    $mergedData = array_merge($mergedData, $piece);
}

// 输出结果
echo json_encode($mergedData);

代码解释

  1. 字符串清理:用str_replace("'", "", $itemsString)去掉所有单引号,把'1.json','2.json','3.json'变成1.json,2.json,3.json。
  2. 分割数组:用explode(',', $cleanedString)把字符串按逗号分割,得到['1.json', '2.json', '3.json']。
  3. 去除空白:用array_map('trim', $urls)处理每个元素,避免文件名里带换行或空格导致文件找不到。
  4. 安全判断:增加file_exists和json_decode的非空判断,避免因为文件缺失或无效JSON导致的错误。

这样修改后,$urls就变成了你需要的多元素数组,和手动写array('1.json','2.json','3.json')的效果完全一样,就能正常合并JSON文件了。

内容的提问来源于stack exchange,提问作者Jason Waltz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:21:46