usort()没有正确处理

时间:2013-03-25 03:16:59

标签: php json

我的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']

2 个答案:

答案 0 :(得分:7)

这样的事情应该有效。

<?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;
}

答案 1 :(得分: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");