尝试对对象数组进行排序时使用 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");
请解释为什么我在尝试对对象数组进行排序时收到此错误:
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");