今天排序很有趣!叹。我有一大堆雄辩的模型,需要通过一个参数在数组中组合在一起,并在那些“clumps'基于另一个参数。这可能很难解释:(
$ master是一个Eloquent结果的集合,我不知道如何在这里写出来,循环这个我可以访问所有模型函数/关系
$screen-md-max: 100000px;
这些属性需要作为排序的基础,下面的属性示例
$master = [];
我想对这些大量的集合进行排序,以便每个$ master->部分都在一个' clump'在数组和里面的那个' clump'最后列出$ master-> carry = 0产品。
//Object 1
$master->carry = 0;
$master->section = 'red';
//Object 2
$master->carry = 1;
$master->section = 'blue';
//Object 3
$master->carry = 0;
$master->section = 'blue';
我尝试了一些不同的$ master-> sort()和$ master-> sortBy()的东西,但是每个新的排序都会抛出旧的排序:(
我目前已经获得了以下代码,它将所有颜色分组,但它并没有根据$ master->进行订购
From the example above I'd expect Object1, Object3, Object2
答案 0 :(得分:2)
据我了解,您希望按以下方式对收藏品进行排序:
您需要将实现此类逻辑的函数传递给 $ master 集合。这个函数应该有2个参数(2个集合元素),比较它们并返回:
在您的情况下,以下回调应该有效:
$master = $master->sort(function ($a, $b) use ($order) {
// get order of first element's section
$pos_a = array_search($a->section, $order);
// get order of second element's section
$pos_b = array_search($b->section, $order)
// if sections are different the value of carry doesn't matter
// as element's sections are enough to determine which of them is larger
if ($pos_a != $pos_b) {
return $pos_a - $pos_b;
}
// carry values are equal, so consider elements equal
if ($a->carry == $b->carry) {
return 0;
}
if (!$a->carry) {
// if $a->carry is equal to 0 it should be put at the end, so after $b
return 1;
}
if (!$b->carry) {
// if $b->carry is equal to 0 it should be put at the end, so after $a
return -1;
}
// otherwise elements can be considered equal
return 0;
});