合并两个数据集PHP


Merge Two Data Sets PHP

最初,我的脚本根据URL中的某些参数获取和解码JSON,然后将这些值插入到数组中,并重新编码为JSON。我必须做出两个单独的请求,一个到facebook,一个两个到instagram,并合并输出数据。我的问题是,这两个数组似乎没有合并,只是输出array_merge函数中的最后一个数据集。

$igjsonData = json_decode((file_get_contents($igurl)));
$fbjsonData = json_decode((file_get_contents($fburl)));
$igresponse = array();
$igresponse["data"] = array();
foreach ($igjsonData->data as $igkey=>$igvalue) {            
        $igdata = array();
        $igdata["network"] = "instagramicon.png";
        $igdata["createdtime"] = $igvalue->caption->created_time;
        $igdata["username"] = $igvalue->caption->from->username;
        $igdata["profileimage"] = $igvalue->caption->from->profile_picture;
        $igdata["caption"] = $igvalue->caption->text;
        $igdata["postimage"] = $igvalue->images->standard_resolution->url;
        array_push($igresponse["data"], $igdata);
}
$fbresponse = array();
$fbresponse["data"] = array();
foreach ($fbjsonData->data as $fbkey=>$fbvalue) {            
        $fbdata = array();
        $fbdata["createdtime"] = $fbvalue->created_time;
        $fbdata["username"] = $fbvalue->from->name;        
        $data["profileimage"] = "profile_picture";
        $fbdata["caption"] = $fbvalue->message;
        $data["postimage"] = "postimage";
        array_push($fbresponse["data"], $fbdata);
}
$output = array_merge($igresponse, $fbresponse);
echo $output;

我需要在数据被重新编码为JSON后合并数据,或者将它们合并为数组,在重新编码之前,我希望能够按照createdtime的顺序排列数据,如果有人知道如何做到这一点的话。不太确定这里的问题到底是什么。

我已经部分地使用了"array"函数,但我仍然想知道如何在我的新数组中通过createdtime进行组织。

$output["data"] = array_merge($igresponse, $fbresponse);
$array = $output["data"];
echo json_encode($array); 

您对两个数组都使用了相同的键,正如网站上提到的那样http://php.net/manual/en/function.array-merge.php,则最新的阵列将取代以前的阵列。

如果您希望instagram数据在不同的元素中,解决方案可能是更改第二个数组的密钥"数据"。或者您可以使用array_merge_curive()。如果你想让facebook数据和instagram数据在同一个元素中,你必须重命名第二个数组中的所有键。

我用这个例子来证明:http://phpfiddle.org/main/code/bkc-t76

我使用以下代码对其进行了如下排序:

$igfbarray = array_merge($igresponse, $fbresponse);
$sortArray = array(); 
foreach($igfbarray as $created){ 
    foreach($created as $key=>$value){ 
        if(!isset($sortArray[$key])){ 
            $sortArray[$key] = array(); 
        } 
        $sortArray[$key][] = $value; 
    } 
} 
$orderby = "createdtime"; //array key 
array_multisort($sortArray[$orderby],SORT_DESC,$igfbarray); 
$output["data"] = $igfbarray;
echo json_encode($output);