PHP usort比较功能

时间:2012-01-19 23:30:55

标签: php arrays function object sorting

我使用array_merge组合了两个数组,现在需要按字母顺序对它们进行排序。问题是我需要比较两个不同的键,

e.g。

[0] => stdClass Object
(
[id] => 16
[title] => Oranges
)

[1] => stdClass Object
(
[id] => 23
[title] => Apples
)

[2] => stdClass Object
(
[id] => 16
[name] => Bananas
)

我需要将'name'属性相互比较,以及'title'属性,然后按字母顺序排序,(忽略id),以便我的结果是:

苹果
香蕉
桔子

然而,我在这里的功能:

function compareItems($a, $b)
{
if ( $a->title < $b->title ) return -1;
if ( $a->title > $b->title ) return 1;
if ( $a->name < $b->name ) return -1;
if ( $a->name > $b->name ) return 1;
return 0;
}

usort($array, "compareItems");

...没有合并,但是对一组属性(标题)进行排序,然后对另一组(名称)进行排序,从而给我:

苹果
橙子
香蕉

我希望我可以修改这个函数将两者合并在一起 - 我不是一个真正的PHP程序员,所以非常感谢任何帮助!

提前致谢。

1 个答案:

答案 0 :(得分:3)

我下面的比较功能应该适合你:

function compareItems($a, $b)
{
    $x = isset($a->title) ? $a->title : $a->name;
    $y = isset($b->title) ? $b->title : $b->name;
    return strcmp($x, $y);
}