最初我的脚本根据放置在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后合并数据,或者将它们合并为数组,然后重新编码,我希望能够按创建时间顺序排列数据,如果有人知道如何做到这一点。不太确定这里的问题究竟是什么。
我已经部分地使用了'array'函数,但仍然想知道如何在新数组中按创建时间进行组织。
$output["data"] = array_merge($igresponse, $fbresponse);
$array = $output["data"];
echo json_encode($array);
答案 0 :(得分:0)
您对阵列使用相同的密钥,并且如网站http://php.net/manual/en/function.array-merge.php所述,最新的阵列将替换之前的阵列。
如果您希望将instagram数据放在不同的元素中,解决方案可能会更改sencond数组的关键“数据”。或者您可以使用array_merge_recursive()。如果你想在相同的元素中使用facebook数据和instagram数据,你必须重命名第二个数组中的所有键。
我使用此示例进行了实验:http://phpfiddle.org/main/code/bkc-t76
答案 1 :(得分:0)
我使用以下代码对其进行了如下所示的排序:
$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);