我想对数组进行排序,但我不能这样做?

时间:2017-01-07 04:09:24

标签: php json sorting foreach

我有一个我创建的JSON文件,我想从最大的价格值中排序。

JSON是这样的:

[
  {
    "username": "elbugato",
    "sold": 19,
    "qmimi": 38.5
  },
  {
    "username": "Pablo",
    "sold": 12,
    "qmimi": 42
  },
  {
    "username": "Hqstuff",
    "sold": 0,
    "qmimi": "0"
  },
  {
    "username": "matchspamm3rs",
    "sold": 0,
    "qmimi": "0"
  },
  {
    "username": "Pachenko",
    "sold": 1,
    "qmimi": 1.1
  },

我想从最高值

对qmimi进行排序

我的PHP代码是这样的。

$sellertop8json = json_decode(get_html('link'));
$i = 1;
sort($sellertop8json->qmimi, SORT_NUMERIC);
foreach($sellertop8json as $top8){
max($top8);
        if (++$i == 8) break;


    echo '<tr>
    <td>'.$top8->username.'</td>
    <td># '.$top8->sold.'</td>
    <td>$ '.$top8->qmimi.'</td>
    </tr>
    ';


}

但他们并没有从最大的价值中分类 结果我得到了:

result

看看&#34; Pachenko&#34;,他正在追踪一个拥有&#34; 0&#34;赢得的。

谢谢 抱歉我的英文不好

P.S:JSON ISN&#39;原来,我从谷歌浏览器上使用的某些扩展程序中复制,所以JSON不是问题所在。

1 个答案:

答案 0 :(得分:0)

您需要使用usort并提供比较元素字段的自定义函数:

usort($sellertop8json, function($a, $b) {
           return $a->qmimi == $b->qmimi ? 0 :
                   $a->qmimi < $b->qmimi ? 1 : -1;
      }
);

如果元素相等,则比较函数必须返回0,如果第一个元素较低,则小于0,如果第二个元素较高,则小于0

这可能会让您感到有点困惑,因为您要从最高位进行排序,因此在比较中交换标志 - 请参阅比较的最后部分。