1

最初に、私のスクリプトは、URL に配置された特定のパラメーターに従って JSON をフェッチしてデコードします。これらの値は配列に挿入され、JSON として再エンコードされます。1 つは Facebook に、もう 1 つは 2 つの instagram に、2 つの別々のリクエストを作成し、出力データをマージする必要があります。私の問題は、2 つの配列がマージされていないようで、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で整理する方法を知りたいです。

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

2 に答える 2

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); 
于 2013-08-01T08:11:56.753 に答える
0

両方の配列に同じキーを使用しており、サイトhttp://php.net/manual/en/function.array-merge.phpに記載されているように、最新の配列が以前の配列を置き換えます。

Instagramデータを別の要素に入れたい場合、解決策はおそらくsencond配列のキー「データ」を変更することです。または、array_merge_recursive() を使用できます。Facebook データと instagram データを同じ要素に含める場合は、2 番目の配列のすべてのキーの名前を変更する必要があります。

私は実験のためにこの例を使用しました: http://phpfiddle.org/main/code/bkc-t76

于 2013-08-01T08:02:44.087 に答える