0

私のコードは次のとおりです

$results = array();
$results[] = json_decode("json api response url", true);
$results[] = json_decode("json api response url 2", true);
$results[] = json_decode("json api response url 3", true);
foreach($results as $result) {
     $decoded = $result['Info'];
     usort($decoded, function($a, $b) { return $a['price'] > $b['price'] ? 1 : -1; });
     foreach($decoded as $row) {
         echo $row['price'];
     } 
}

JSON配列は次のように返されます

["Info"]=>
[0]=>
array(13) {
  ["price"]=>  
    int(3000)
} 
[1]=>
array(13) {
  ["price"]=>
     int(5000)

すべてを一緒にするのではなく、すべての応答usortに対して実行します。これを回避する方法はありますか?json_decode

4

3 に答える 3

2

配列内のすべてのアイテムに対してusortを実行しています。結果をループする前に、usortを実行してみてください。これがうまくいくかどうかはわかりませんが、正しい方向を示しているはずです。

$results = array();
$results[] = json_decode("json api response url", true);
$results[] = json_decode("json api response url 2", true);
$results[] = json_decode("json api response url 3", true);

usort($results, function($a, $b) {
  return $a['Info']['price'] > $b['Info']['price'] ? 1 : -1;
});

foreach($results as $result) {
   // do your looped stuff
}
于 2013-03-25T15:24:43.660 に答える
1

結果に3つの異なる配列要素を作成するのではなく、すべてのJSON応答を連結してまとめることが、あなたのやりたいことだと思います。array_merge()を調べてください:

$result = array();
$arr1 = json_decode("json api response url", true);
$arr2 = json_decode("json api response url 2", true);
$arr3 = json_decode("json api response url 3", true);

$result = array_merge($arr1['Info'], $arr2['Info'], $arr3['Info']);

$decoded = $result;
usort($decoded, function($a, $b) { return $a['price'] > $b['price'] ? 1 : -1; });
foreach($decoded as $row) {
  echo $row['price'];
} 
于 2013-03-25T15:12:57.740 に答える
0
$results = array();
$results[] = json_decode("json api response url", true);
$results[] = json_decode("json api response url 2", true);
$results[] = json_decode("json api response url 3", true);

function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

usort($results, "cmp");

foreach($results as $row) {
   echo $row['price'];
}
于 2013-03-25T15:34:24.870 に答える