按 属性 对 php 数组进行排序的最简单方法

easiest way to sort a php array by property

我尝试了这个post中的一些方法: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

我做错了什么?

您不能使用 <> comparison operators 比较字符串,它们是为 PHP 中的数字保留的。如果你这样做,你的字符串首先被透明地类型转换为数字,可能所有的计算结果都是 0,因此看似随机的结果。

尝试使用 strcmp(),它比较字符串和 returns 数字,就像 usort() 期望的那样:

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

注意从PHP5.3开始,可以避免在全局范围内声明函数,而是使用匿名函数:

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