dongxia026531 2012-05-20 21:07
浏览 38
已采纳

php json解码排序依据

function mySort($a, $b) {
 if (strtolower($a->n) == strtolower($b->n)) return 0;
 return (strtolower($a->n) < strtolower($b->n)) ? -1 : 1;
}

This works well for some json data like this

$txt = '[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"}]
$j = json_decode($txt);
usort($j, 'mySort');
foreach ($j as $k=>$v) {
    echo $v->n.'<br />';//1 2 3 4 5 6 7 8 9 10 11
}

But when some data like this:

$txt = '[{"n":"a 1"},{"n":"a 2"},{"n":"a 3"},{"n":"a 4"},{"n":"a 5"},{"n":"a 6"},{"n":"a 7"},{"n":"a 8"},{"n":"a 9"},{"n":"a 10"},{"n":"a 11"}]';
$j = json_decode($txt);
usort($j, 'mySort');
foreach ($j as $k=>$v) {
    echo $v->n.'<br />';//a 1  a 10  a 11  a 2  a 3  a 4  a 5  a 6  a 7  a 8  a 9
}

I need a sort as

a 1  a 2  a 3  a 4  a 5  a 6  a 7  a 8  a 9  a 10  a 11

Thanks.

  • 写回答

2条回答 默认 最新

  • dongzhen7108 2012-05-20 21:19
    关注

    Or even simpler, use strnatcmp. It performs natural ordering and compare the elements in a way that seems natural to humans.

    Example:

    function mySort($a, $b) {
      return strnatcmp($a->n, $b->n);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集