如何将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);
代码解释
- 字符串清理:用
str_replace("'", "", $itemsString)去掉所有单引号,把'1.json','2.json','3.json'变成1.json,2.json,3.json。 - 分割数组:用
explode(',', $cleanedString)把字符串按逗号分割,得到['1.json', '2.json', '3.json']。 - 去除空白:用
array_map('trim', $urls)处理每个元素,避免文件名里带换行或空格导致文件找不到。 - 安全判断:增加
file_exists和json_decode的非空判断,避免因为文件缺失或无效JSON导致的错误。
这样修改后,$urls就变成了你需要的多元素数组,和手动写array('1.json','2.json','3.json')的效果完全一样,就能正常合并JSON文件了。
内容的提问来源于stack exchange,提问作者Jason Waltz
相关产品推荐
相关产品推荐

