对象数组排序

6
我在 PHP 手册中遇到了一些问题,所以我想在这里问一下...
我有一个对象数组.. 有没有一种方法可以根据对象的内容对其进行排序?
例如,我的数组是:
Array
(
    [0] => stdClass Object
        (
            [id] => 123
            [alias] => mike
        )

    [1] => stdClass Object
        (
            [id] => 456
            [alias] => alice
        )

    [2] => stdClass Object
        (
            [id] => 789
            [alias] => zeke
        )

    [3] => stdClass Object
        (
            [id] => 987
            [alias] => dave
        )
)

如何按对象的 [alias] 对数组进行排序?
例如,输出应该是:
Array
(
    [0] => stdClass Object
        (
            [id] => 456
            [alias] => alice
        )

    [1] => stdClass Object
        (
            [id] => 987
            [alias] => dave
        )

    [2] => stdClass Object
        (
            [id] => 123
            [alias] => mike
        )

    [3] => stdClass Object
        (
            [id] => 789
            [alias] => zeke
        )
)

提前感谢!
2个回答

8
使用usort()函数。您需要指定一个函数来执行比较操作,排序是基于该函数完成的。例如:
function my_comparison($a, $b) {
  return strcmp($a->alias, $b->alias);
}

$arr = ...;

usort($arr, 'my_comparison');

如果我需要按品牌名称,然后按产品对象数组的类别进行排序,该怎么办? - tom10271

2

我认为该订单已经丢失,我找到了这个其他函数

<?php 
/** 
 * Sort array of objects by field. 
 * 
 * @autor Lea Hayes
 * @param array $objects Array of objects to sort. 
 * @param string $on Name of field. 
 * @param string $order (ASC|DESC) 
 */ 
function sort_on_field(&$objects, $on, $order = 'ASC') { 
    $comparer = ($order === 'DESC') 
        ? "return -strcmp(\$a->{$on},\$b->{$on});" 
        : "return strcmp(\$a->{$on},\$b->{$on});"; 
    usort($objects, create_function('$a,$b', $comparer)); 
}

$order = ($_GET['order'] === 'asc') ? 'ASC' : 'DESC';
sort_on_field($arr, 'alias', $order);

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