Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP合并json文件_Php - Fatal编程技术网

PHP合并json文件

PHP合并json文件,php,Php,我有2个json文件,每个文件包含500个数组。我需要在一个文件中合并两个文件,这样结果将是1000个数组。我从stackoverflow中找到了代码,但它不起作用,它只是向我显示文件1数据 <?php $a = file_get_contents ("cache.json"); $b = file_get_contents ("cache2.json"); $r = []; foreach(json_decode($a, true) as $key => $array){ $

我有2个json文件,每个文件包含500个数组。我需要在一个文件中合并两个文件,这样结果将是1000个数组。我从stackoverflow中找到了代码,但它不起作用,它只是向我显示文件1数据

<?php

$a = file_get_contents ("cache.json");
$b = file_get_contents ("cache2.json");

$r = [];
foreach(json_decode($a, true) as $key => $array){
 $r[$key] = array_merge(json_decode($b, true)[$key],$array);
}
echo count($r);
?>
尝试使用json解码进行数组合并


工作示例:

替代解决方案,无解码:

function concatJsonArrays(...$arrays) {
    $result = [];

    foreach ($arrays as $array) {
        $result[] = substr($array, 1, strlen($array) - 2);
    }

    return "[".implode(',', $result)."]";
}

// print result aray
echo concatJsonArrays($a, $b);

如果您有大json数据或json中的深层对象,这个解决方案一定会更好。

您可以使用array merge,但我建议首先确保json代码有效且文件存在,然后再假设json_decode将返回数组。否则,如果将NULL或FALSE与数组合并,则最终结果为FALSE

假设第一个缓存文件存在,而另一个不存在,或者其中一个已损坏并包含损坏的编码JSON数据

通过检查,至少您知道您将始终获得一个包含尽可能多的有效数组数据的数组,或者知道何时报告错误以及在其中一个阶段中报告哪个文件

$data = Array();
foreach(Array("cache.json","cache2.json") as $f){
    $dc = Array();
    if($fc = file_get_contents($f)){
        if($dc = json_decode($fc,true)){
            $data = empty($data)?$dc:array_merge($data,$dc);
        }
    }
}

echo json_encode($data);

array_merge after json_decode$json,true?虽然此建议实际上可能适用于提供的示例数据,但使用字符串函数手动创建有效的json字符串绝对不是专业做法。研究人员——你们已经被警告过了。我可以简化为:$data=[];foreach[cache.json,cache2.json]作为$f{$data=array\u merge$data,json\u decodefile\u get\u contents$f,true;}echo json\u encode$data;
function concatJsonArrays(...$arrays) {
    $result = [];

    foreach ($arrays as $array) {
        $result[] = substr($array, 1, strlen($array) - 2);
    }

    return "[".implode(',', $result)."]";
}

// print result aray
echo concatJsonArrays($a, $b);
$data = Array();
foreach(Array("cache.json","cache2.json") as $f){
    $dc = Array();
    if($fc = file_get_contents($f)){
        if($dc = json_decode($fc,true)){
            $data = empty($data)?$dc:array_merge($data,$dc);
        }
    }
}

echo json_encode($data);