在php中将json文件合并在一起
我在一个目录上迭代并合并其中的JSON文件。但它并不像我希望的那样有效。迭代3个文件后得到的数组只是最后一个文件。在这个过程中,它似乎只是覆盖了以前的文件。但我不知道在哪里。此外,我还想删除带有某些条目的行,但如果合并至少能起作用,我会很高兴在php中将json文件合并在一起,php,json,Php,Json,我在一个目录上迭代并合并其中的JSON文件。但它并不像我希望的那样有效。迭代3个文件后得到的数组只是最后一个文件。在这个过程中,它似乎只是覆盖了以前的文件。但我不知道在哪里。此外,我还想删除带有某些条目的行,但如果合并至少能起作用,我会很高兴 <?php $dir = new DirectoryIterator("path1"); $destination = "path2"; $json = file_get_contents($destination); $result = json_
<?php
$dir = new DirectoryIterator("path1");
$destination = "path2";
$json = file_get_contents($destination);
$result = json_decode($json,true);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
$path = $dir -> getPathname();
$data = file_get_contents($path);
echo $data; //works as intended. Prints 3 different Arrays after eachother
$current = json_decode(file_get_contents($path),true);
$result = array_merge($result,$current);
}
}
$final = json_encode($result);
file_put_contents($destination,$final);
?>
提前感谢您的帮助函数array\u merge具有以下覆盖行为: 如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值 这个小例子可以说明这种效果:
$a1 = array("a" => 1, "b" => 2);
$a2 = array("a" => 100, "b" => 200);
$result = array_merge($a1, $a2);
print_r (json_encode($result));
输出:
{a:100,“b:200}
因此,第一个数组的值丢失
有几种解决方案,但这取决于您希望得到的结果。例如,如果您希望获得以下信息:
{“a”:[1100],“b”:[2200]}
然后使用该函数而不是array\u merge
如果您希望获得此信息:
[{“a:1,b:2},{“a:100,b:200}]
然后使用以下代码:
$result[] = $a1;
$result[] = $a2;
在原始代码中,最后一个解决方案如下所示:
$result[] = json_decode($json,true);
foreach ($dir as $fileinfo) {
// ...
$result[] = $current;
// ...
}
每个文件内容是以
[
开头还是以{
开头?@trincot它以{开头,然后请注意,如果其中两个数组共享密钥,第一个密钥将被最后一个密钥覆盖。这是数组合并
的效果。在极端情况下,如果两个数组具有完全相同的密钥(但具有不同的值),您将只剩下最后一个数组。您能检查一下是否是这样吗?是的,我非常确定它们具有相同的键,因为它在不同的时间处于同一个表中,因此具有不同的值,但具有相同的键。有没有办法防止重写?那么,您需要告诉我您期望的结果是什么?因为键是unique在关联数组中。您可以拥有一个键,该键的值是一个嵌套数组,列出每个文件中的不同值。这是您想要的吗?还是您想要一个数组数组,其中每个文件的内容都被视为包装数组的一个元素?非常感谢您的快速帮助!我可以给您一些建议吗作为一个优秀用户的结局还是什么?这一切都很新鲜一旦你有了5分的声望,你就可以向上投一个答案(使用向上箭头)。所以如果你想,去获得这个声望,然后回来:-)