如评论中所述,在数据库中执行此操作将是最有效的。查找 RedBean 的文档我发现http://redbeanphp.com/manual2_0/finding_beans。从那里采取:
$needles = R::find('needle',' haystack = :haystackname
ORDER BY :sortorder',
array( 'sortorder'=>$sortorder, ':haystack'=>$haystack ));
将此示例应用于上面的代码将按如下方式完成:
$user = $_SESSION['user'];
$userfol = R::find('follow','user_id=? ORDER BY create_date', array($user->id));
foreach ($userfol as $uf)
{
$userrec = R::find('recipe','user_id=?', array($uf->following_id));
}
上面示例的排序顺序不是动态的,但是您可以像用户 id 一样用问号替换它。
当我在这里时,您可以使用 :name 代替问号。问号按照您放置它们的顺序进行评估,并按顺序从数据数组中获取值。当以冒号开头时,它将在关联数组中查找该名称,这可能是有利的。
如果出于某种原因您仍然想使用 usort,我在这里设置了一个示例。如您所见,排序函数比较了 $a 和 $b 的 create_date 元素,您可以将其替换为与您的应用程序相关的内容。至于你应该返回什么,引用文档:
如果认为第一个参数分别小于、等于或大于第二个参数,则比较函数必须返回小于、等于或大于零的整数。