为什么这个PHP代码对数组进行排序而不返回正确的值?

时间:2011-12-09 21:39:57

标签: php

我有一系列我从数据库中提取的产品。我使用以下代码验证了这些是正确的:

$unsorted_products = products::get( array( 'collection' => $collection->id ) );
die(print_r($unsorted_products));

......结果如我所料。问题是,我需要将结果基本上按父类别和类别分组。他们如何在每个分组中排序,我不在乎。鉴于我无权更改通过SQL检索数据的模型,我需要通过PHP对此数组进行排序。我正在使用以下代码:

$products = usort($unsorted_products, function ($a, $b) {
        return strcmp(
            $a->parentcategory.$a->categoryname,
            $b->parentcategory.$b->categoryname
        );
    });

...但是转储$products数组会发现它只保留值1.任何想法我做错了什么?我已经验证了我试图访问的属性确实存在于每个对象中。

感谢。

2 个答案:

答案 0 :(得分:4)

对输入数组进行排序。

来自用户手册:

  

成功时返回TRUE,失败时返回FALSE。

答案 1 :(得分:1)

你做错了。 usort不返回数组,它返回ether true或false。它会将您传递的数组更改为第一个参数。

执行代码后,$ unsorted_products变为排序数组。这样做:

$products = products::get( array( 'collection' => $collection->id ) );

和此:

usort($products, function ($a, $b) {
        return strcmp(
            $a->parentcategory.$a->categoryname,
            $b->parentcategory.$b->categoryname
        );
    });