usort()无法正确处理

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

我尝试在我的foreach之后添加usort($decoded['AuctionInfo']['price'],但是这只会导致错误,请问有谁能指点我正确的方向吗?

我想要做的只是以降序排序$decoded['AuctionInfo']['price']


请展示您的usort()代码部分,以及任何错误。 - Sudhir Bastakoti
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;
}

你太棒了,虽然它会抛出“Warning: usort() expects exactly 2 parameters, 1 given in”警告,但实际的排序是有效的。 - Curtis Crewe
当我执行我发布的代码时,我没有遇到这个错误。你能否发布一下你正在运行的代码,以便我们找出问题所在? - keelerm
抱歉,我的错误,我也把旧代码留在文件中了,谢谢! - Curtis Crewe
不用谢,我很乐意帮助。 - keelerm
2
这段代码实际上并不完整,比较函数中缺少相等的情况。 - dube

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接