Php 如何在我的特定阵列上使用usort

Php 如何在我的特定阵列上使用usort,php,arrays,sorting,usort,Php,Arrays,Sorting,Usort,只是看了一些涉及usort的例子,我不能完全理解为我的数组创建函数。我相信这很简单,所以我想我会在这里问。我用的是小枝和红豆,但我不认为这有什么关系。这是我的密码: $user = $_SESSION['user']; $userfol = R::find('follow','user_id=?', array($user->id)); foreach ($userfol as $uf) { $userrec = R::find('recipe','user_id=?', arr

只是看了一些涉及usort的例子,我不能完全理解为我的数组创建函数。我相信这很简单,所以我想我会在这里问。我用的是小枝和红豆,但我不认为这有什么关系。这是我的密码:

$user = $_SESSION['user'];
$userfol =  R::find('follow','user_id=?', array($user->id));
foreach ($userfol as $uf)
{
    $userrec = R::find('recipe','user_id=?', array($uf->following_id));
}
我想对数组$userrec进行排序,以按创建日期显示配方,并将其限制为一次只显示一个配方。有什么想法吗


非常感谢您的光临

如评论中所述,在数据库中这样做将是最有效的。查找我找到的红豆的文档。从这里开始:

$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,我举了一个例子。正如您可以看到的那样,sorter函数比较了$a和$b的create_date元素,您可以用与应用程序相关的内容替换它。关于您应该返回的内容,请引用文档:

比较函数必须返回小于、等于或等于的整数 如果第一个参数被认为是 分别小于、等于或大于第二个


如评论中所述,在数据库中这样做将是最有效的。查找我找到的红豆的文档。从这里开始:

$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,我举了一个例子。正如您可以看到的那样,sorter函数比较了$a和$b的create_date元素,您可以用与应用程序相关的内容替换它。关于您应该返回的内容,请引用文档:

比较函数必须返回小于、等于或等于的整数 如果第一个参数被认为是 分别小于、等于或大于第二个


我认为在数据库中这样做比使用
usort
更有建设性。我同意Deceze的观点。如果可以在DB中进行,那么在PHP中进行是没有意义的。谢谢deceze,你会建议我怎么做?我认为在数据库中进行此操作比使用
usort
更有建设性。我同意deceze。如果可以在DB中实现,那么在PHP中实现是没有意义的。谢谢deceze,你会建议我怎么做?谢谢,我以前见过它,但不确定如何在我的代码中实现它。你知道上面的例子在我的代码中会是什么样子吗?对不起,我太天真了。@MikeHolford更新了我的答案。哇,非常感谢你的帮助@wouther,我会尝试一下,然后再回复你!非常好。@MikeHolford我刚才看了您前面的问题,从中得出结论,您的R::find返回一项,因为(可能)用户id是唯一的。在这种情况下,ORDERBY不会帮助您,而且$userrec不会是数组。ORDER BY对一个SQL查询返回的项进行排序(或者R::find调用,如果您愿意这样调用的话)。在这种情况下,您可能想研究SQL连接,但我对RedBean不够熟悉,无法提供建议。感谢@wouther我刚刚尝试了
$userrec=R::find('recipe','user\u id=?ORDER BY uploaddate LIMIT 1',array($uf->following\u id)),它似乎显示正确!这可能是因为我将数组存储为如下所示
$vals['userrec']
,因此ORDER BY起作用。谢谢你,非常感谢。我想如果我要连接两个数据库表,尽管我将来可能需要使用您的函数或usort。非常感谢。感谢这一点,我以前见过它,但不知道如何为我的代码实现它。你知道上面的例子在我的代码中会是什么样子吗?对不起,我太天真了。@MikeHolford更新了我的答案。哇,非常感谢你的帮助@wouther,我会尝试一下,然后再回复你!非常好。@MikeHolford我刚才看了您前面的问题,从中得出结论,您的R::find返回一项,因为(可能)用户id是唯一的。在这种情况下,ORDERBY不会帮助您,而且$userrec不会是数组。ORDER BY对一个SQL查询返回的项进行排序(或者R::find调用,如果您愿意这样调用的话)。在这种情况下,您可能想研究SQL连接,但我对RedBean不够熟悉,无法提供建议。感谢@wouther我刚刚尝试了
$userrec=R::find('recipe','user\u id=?ORDER BY uploaddate LIMIT 1',array($uf->following\u id)),它似乎显示正确!这可能是因为我将数组存储为如下所示
$vals['userrec']
,因此ORDER BY起作用。谢谢你,非常感谢。我想如果我要连接两个数据库表,尽管我将来可能需要使用您的函数或usort。非常感谢。