【问题标题】:usort comparison function does not appear to be called似乎没有调用 usort 比较函数
【发布时间】:2018-08-29 19:28:39
【问题描述】:

我有一个包含对象的数组,我想按对象属性对数组进行排序。所以我必须为此使用 usort 。但是我的数组没有排序。所以我在我的代码中添加了一些 var_dumps 来调试它。这是我的代码:

var_dump(count($fields));
usort($fields, function ($a, $b) {
    var_dump("A");
    return ($b->getPosition() - $a->getPosition());
});
var_dump("B");
die;

结果是这样的:int(4) string(1) "B",然后..

我希望看到string(1) "A" 也被打印出来

所以看起来在 usort 函数内部没有发生任何事情。什么可以解释这种行为?我的 PHP 版本是 7.1.21

(上面的代码我已经编辑过了,还是不行。没有A记录,数组没有排序)

【问题讨论】:

  • 执行var_dump($fields) 并发布输出
  • var_dump($fields);die;给了我一个空白页...但是 var_dump($fields[0]->getPosition());die;给我正确的号码。
  • 嗯,这很奇怪。那么var_dump(gettype($fields))呢?
  • 那是字符串(6)“对象”
  • 如果 var_dump($fields) 给你一个空页面......也许你正在寻找的问题不是在 usort 上,而是在这个数组的分配/声明/修改中,所以我们将需要看那个代码..我用我自己定义的数组尝试了你的代码,它工作了

标签: php usort


【解决方案1】:

usort 不适用于对象(无论如何在 PHP 7.2 中)。您需要将其转换为数组(因为它似乎是一个集合对象,它可能有一个类似toArray() 的方法)

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多