PHP合并json文件
我有2个json文件,每个文件包含500个数组。我需要在一个文件中合并两个文件,这样结果将是1000个数组。我从stackoverflow中找到了代码,但它不起作用,它只是向我显示文件1数据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){ $
<?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);