2013-03-25 87 views
2

我从一个JSON结果数组返回如下:usort()不处理正确

["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']降序排列

+0

PLS显示的代码的usort()的一部分..和错误 – 2013-03-25 03:22:42

回答

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; 
} 
+0

你很惊人的工作,虽然它的投掷'警告:usort()期待恰好2个参数,1中给出,但实际的排序工作 – 2013-03-25 03:31:38

+0

当我执行我发布的代码时,我没有得到这个错误。你可以发布你正在运行的代码给你这个错误吗? – keelerm 2013-03-25 03:36:42

+0

对不起,我的错误我也遗留了我的旧代码,谢谢! – 2013-03-25 03:38:48

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");