尝试对对象数组进行排序时使用 usort 会导致错误

Using usort results in an error when trying to sort array of objects

请解释为什么我在尝试对对象数组进行排序时收到此错误:
usort() expects parameter 1 to be array, object given

数组截图:http://prntscr.com/ik3ira
错误截图:http://prntscr.com/ik3dte

function cmp($a, $b)
{
    return strcmp(count($a->bank->credits), count($b->bank->credits));
}
$banks=usort($banks, "cmp");

usort 接受一个数组作为它的第一个参数,但是你传递的是一个对象

也请将回调作为第二个参数传递

使用toArray函数

$banks=usort($banks->toArray(), $callBackFucntion);

您有一个集合,而不是对象数组。我将假设您使用 Laravel,在这种情况下,集合已经提供了一个您可以使用的 sortBy 函数。

如果您的对象包含一个包含 credits 属性的银行对象,它将如下所示:

$banks = $banks->sortBy(function ($bank, $key) {
    return $bank->bank->credits;
});

那将是更简洁的方式。

您也可以通过 toArray 将其转换为对象数组(您希望从中开始),然后继续使用您的代码。

答案在错误信息中,$banks不是数组而是对象..

不幸的是,usort 仅适用于数组。如果您愿意,可以将 $banks 类型转换为关联数组,因此您的 usort 调用可能如下所示:

$banks = usort(array($banks), "cmp");

http://php.net/manual/en/function.usort.php

http://www.php.net/manual/en/language.types.array.php