4

jsonの結果からの私の配列は次のように返されます:

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

私が使おうとしていたPHPコードは単純でした

<?php
$decoded = json_decode("my json api", true);
foreach($decoded['AuctionInfo'] as $item) { 
usort($decoded['AuctionInfo']['price']);?>
<tr>
    <td><?php echo $item['price']; ?></td>
</tr>
<?php } ?>

usort($decoded['AuctionInfo']['price']私は私の後に追加しようとしましたforeachが、それはエラーをスローします、誰かが私を正しい方向に向けることができますか?

私がやりたいの$decoded['AuctionInfo']['price']は降順で並べ替えるだけです

4

2 に答える 2

9

このようなものが機能するはずです。

<?php

$data = array(
    'AuctionInfo' => array(
        array('price' => 500),
        array('price' => 3000)
    )
);

$decoded = $data['AuctionInfo'];
foreach($decoded as $item) {
    echo $item['price'] . PHP_EOL;
}

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

foreach($decoded as $item) {
    echo $item['price'] . PHP_EOL;
}
于 2013-03-25T03:28:41.910 に答える
0

コードには、忘れた別のレベルのインデックスがあります。たとえば、これは有効です

<?php echo $decoded['AuctionInfo'][1]['price'] ?>
>5000

ただし、現在$decoded['AuctionInfo']['price']の状態では、配列は生成されずprice、整数のインデックス内のインデックスが検索されます。

これを回避する方法はいくつかありますが、最も簡単な方法は、比較対象priceの要素をチェックする独自の比較関数を作成することです。

function price_cmp($a, $b){
    if ($a["price"] == $b["price"]) {
        return 0;
    }
    else if ($a["price"] < $b["price"]){
        return 1;
    }
    else{
        return -1;
    }
}
usort($decoded, "price_cmp");
于 2013-03-25T03:31:02.867 に答える