Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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_Json - Fatal编程技术网

用PHP合并两个JSON对象?

用PHP合并两个JSON对象?,php,json,Php,Json,我有两个JSON对象,我希望它合并成一个JSON对象。我不希望JSON数据被覆盖。我希望数据被合并 Object#1:(example1.json) [{ "title": "xx", "releaseYear": "2014", }, { "title": "yy", "releaseYear": "2015" }] [ { "title":"xx", "rel

我有两个JSON对象,我希望它合并成一个JSON对象。我不希望JSON数据被覆盖。我希望数据被合并

Object#1:(example1.json)

[{
    "title": "xx",        
    "releaseYear": "2014",        
},
{
    "title": "yy",       
    "releaseYear": "2015"        
}]
[  
   {  
      "title":"xx",
      "releaseYear":"2014"
   },
   {  
      "title":"yy",
      "releaseYear":"2015"
   },
   {  
      "title":"yy",
      "releaseYear":"2017"
   }
]    
Object#2:(example2.json)

这是我当前使用的PHP文件

    <?php

    $jsonString = file_get_contents('example.json');
    $jsonString2 = file_get_contents('example2.json');   
    $data = json_decode($jsonString, true);
    $data2 = json_decode($jsonString2, true);      


    $op = array_merge_recursive( $data, $data2 );

    $resJson = json_encode($op);
    file_put_contents('example3.json', $resJson);   
所需输出:

[{
    "title": "xx",        
    "releaseYear": "2014"        
},
{
    "title": "yy",       
    "releaseYear": "2017"        
}]

感谢您的解决方案。我是Stackoverflow的新手,所以很抱歉我的格式不好,如果有的话。提前感谢:)

许多可能的解决方案。一个例子:

<?php
$data = json_decode('[{"title": "xx","releaseYear": "2014"},{"title": "yy","releaseYear": "2015"}]', true);
$data2 = json_decode('[{"title": "yy","releaseYear": "2017"}]', true);

$data = foo($data, 'title');
$data = foo($data2, 'title', $data);
$data = array_values($data);
var_export($data);

function foo($src, $prop, $target=array()) {
    foreach($src as $o) {
        $target[ $o[$prop] ] = $o;
    }
    return $target;
}

发布年份与给定对象不匹配。这是正确的吗?如果是这样,这是否意味着在进行合并时,您总是必须在匹配的标题上采用更高的发布年份值?我很困惑,您不想覆盖数据,您想合并,但您要求的结果显然是覆盖,而不仅仅是合并?覆盖:[{“title”:“yy”,“releaseYear”:“2017”}]由于只有一个对象,它将覆盖并合并第二个数据。这就是我所说的覆盖。首先,谢谢你的回答。我运行了它,它给了我这个输出:数组(0=>数组('title'=>'xx','releaseYear'=>'2014',),1=>数组('title'=>'yy','releaseYear'=>'2017',),这就是我需要的。但是我可以得到JSON格式的吗?比如:[{title:“xx”,“releaseYear:“2014”},{“title:“yy”,“releaseYear:“2017”}]之后,这些数据将在Android中被截取解析,它不识别那种类型的数据,这就是为什么。提前感谢:)感谢@VolkerK提供的解决方案。一个简单的谷歌帮助我得到了JSON格式的文件。使用echo json_编码($data);而不是var_导出($data);再次感谢您,如果您有空,请告诉我使用var_export的用法:)我只是更喜欢var_dump的输出;-)您可以复制var_export的输出,并按原样粘贴到php脚本中,将其用作示例数据。
<?php
$data = json_decode('[{"title": "xx","releaseYear": "2014"},{"title": "yy","releaseYear": "2015"}]', true);
$data2 = json_decode('[{"title": "yy","releaseYear": "2017"}]', true);

$data = foo($data, 'title');
$data = foo($data2, 'title', $data);
$data = array_values($data);
var_export($data);

function foo($src, $prop, $target=array()) {
    foreach($src as $o) {
        $target[ $o[$prop] ] = $o;
    }
    return $target;
}