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 回答