【问题标题】:easiest way to sort a php array by property按属性对php数组进行排序的最简单方法
【发布时间】:2015-03-31 04:03:33
【问题描述】:

我尝试了这篇帖子中的一些方法:Sort array by object property in PHP?

但我无法在 wordpress 中按我的人员数组的姓氏排序。

这是我的工作:

<?php 
    function personSort( $a, $b ) {
        return $a->last_name == $b->last_name ? 0 : ( $a->last_name > $b->last_name ) ? 1 : -1;
    }

    usort( $autlist, 'personSort' );
    foreach($autlist as $al){ ?>
        <option value="<?php echo $al->ID; ?>"><?php echo $al->first_name.' '.$al->last_name; ?></option>

顺序如下:

Nick Hammond
Peter Ruck
Nam Ol Lamon

我做错了什么?

【问题讨论】:

  • @skobaljic 我应该删除 -1 吗?当我这样做时,页面会中断。
  • 不,我认为这很好,但是您正在对对象进行排序,也许您应该使用ArrayObject::uasort

标签: php arrays wordpress sorting


【解决方案1】:

您不能使用 &lt;&gt; comparison operators 比较字符串,它们在 PHP 中是为数字保留的。如果你这样做了,你的字符串首先被透明地类型转换为数字,可能所有评估为0,因此看似随机的结果。

尝试使用strcmp(),它比较字符串并返回一个数字,就像usort() 期望的那样:

function personSort( $a, $b ) {
    return strcmp($a->last_name, $b->last_name);
}

请注意,从 PHP 5.3 开始,您可以避免在全局范围内声明函数,而是使用匿名函数:

usort($autlist, function ($a, $b) {
    return strcmp($a->last_name, $b->last_name);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2012-06-21
    • 2021-10-21
    • 2019-01-12
    • 1970-01-01
    • 2011-01-22
    • 2019-08-17
    相关资源
    最近更新 更多