通过2个参数对Laravel系列进行排序

问题描述:

今天排序很有趣!叹。我有一大堆雄辩的模型,它们需要通过一个参数在数组中组合在一起,然后在基于另一个参数的“块”中排序。这可能是很难解释:(通过2个参数对Laravel系列进行排序

$主口若悬河结果的收集,我不知道如何将它们写在这里,遍历这个我可以访问所有的模型功能/关系

$master = []; 

这些具有2个属性需要成为一个排序的基础,例如性能低于

//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-> carry = 0产品ar最后列出。

From the example above I'd expect Object1, Object3, Object2 

我试过主 - 几个不同的$>的sort()和$主 - > sortBy()的东西,但每个新的排序抛出了旧排序:(

我有目前下面的代码,这组了所有的颜色,但基于$主 - >如果不命令他们携带又

$order = array('red', 'blue', 'green'); 

    $master = $master->sort(function ($a, $b) use ($order) { 
     $pos_a = array_search($a->sectionheader, $order); 
     $pos_b = array_search($b->sectionheader, $order); 
     return $pos_a - $pos_b; 
    }); 

我的理解,要排序您的收藏方式如下:

  • 排序的顺序截面部内存储在$顺序阵列
  • 进位= 0移动元件与端

您必须通过将实现这样的逻辑到功能$主人集合。该函数应该采取2个参数(集合的2个元件),对它们进行比较,并返回:

  • 如果元素相等
  • 如果第一元件比第二元件更大
  • -1如果第一个元素是比第二元素

在你的情况要小以下的回调应该工作:

$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; 
}); 
+0

这真的很接近我想,非常感谢你的配偶(这是今天你第二次来到一个惊人的例子,所以啤酒就在我身上)。然而,这似乎完全抛弃了丛集所在的原始顺序(id ASC),是否有办法只将进位项目排序到每个部分的底部,而不交换每个“丛块”的顺序 - 我只是在运送物品之外实现的是收集的结束,其他一切都按照正确的顺序进行。 –

+0

没关系,我添加了$ a-> id和$ b-> id的回报,它的工作完美。你的时间和精力非常感谢。谢了哥们!!! –

+0

你是在哪里添加的?我将在第一个if()语句之后更新答案 –