在php中将json文件合并在一起

在php中将json文件合并在一起,php,json,Php,Json,我在一个目录上迭代并合并其中的JSON文件。但它并不像我希望的那样有效。迭代3个文件后得到的数组只是最后一个文件。在这个过程中,它似乎只是覆盖了以前的文件。但我不知道在哪里。此外,我还想删除带有某些条目的行,但如果合并至少能起作用,我会很高兴 <?php $dir = new DirectoryIterator("path1"); $destination = "path2"; $json = file_get_contents($destination); $result = json_

我在一个目录上迭代并合并其中的JSON文件。但它并不像我希望的那样有效。迭代3个文件后得到的数组只是最后一个文件。在这个过程中,它似乎只是覆盖了以前的文件。但我不知道在哪里。此外,我还想删除带有某些条目的行,但如果合并至少能起作用,我会很高兴

<?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分的声望,你就可以向上投一个答案(使用向上箭头)。所以如果你想,去获得这个声望,然后回来:-)