按2个参数对Laravel集合进行排序

乔希(Josh)

今天排序很有趣!叹。我有很多雄辩的模型集合,这些模型需要通过一个参数在数组中分组在一起,并根据另一个参数在这些“簇”中排序。这可能很难解释:(

$ master是一个雄辩的结果的集合,我不确定如何在这里写出来,遍历这个我可以访问所有模型的函数/关系

$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-> section在数组的一个“簇”中,并且在该“簇”中,最后列出$ master-> carry = 0产品。

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

我已经尝试了几种不同的$ master-> sort()和$ master-> sortBy()东西,但是每个新的排序都会抛弃旧的排序:(

我现在有下面的代码,它将所有颜色归为一组,但是它并没有基于$ master-> carry进行排序

$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;
    });
jedrzej.kurylo

据我了解,您希望通过以下方式对集合进行排序:

  • $ order数组中存储的顺序按节排序
  • 在部分内,将进位= 0的元素移到末尾

您需要将实现此类逻辑的函数传递给$ master集合。此函数应采用2个参数(集合的2个元素),对其进行比较并返回:

  • 如果元素相等则为0
  • 如果第一个元素大于第二个元素,则为1
  • 如果第一个元素小于第二个元素,则为-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;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel按日期对集合进行排序

来自分类Dev

LISP按2个参数对列表进行排序

来自分类Dev

按另一个数组对 Laravel 集合进行排序

来自分类Dev

按日期对laravel 5.1集合响应进行排序

来自分类Dev

按两个不同的属性对集合进行排序

来自分类Dev

linq按2个参数排序

来自分类Dev

如何按相关集合属性过滤的相关集合计数对集合(如前20个)进行排序?

来自分类Dev

如何按相关集合属性过滤的相关集合计数对集合(如前20个)进行排序?

来自分类Dev

按一个属性对集合进行排序,如果为空,则按不同的属性进行排序

来自分类Dev

Jekyll:无法按日期对集合进行排序

来自分类Dev

按一个属性对集合进行排序,如果为空,则按不同属性进行排序

来自分类Dev

按另一个数组对集合进行排序

来自分类Dev

按2个属性对对象数组进行排序

来自分类Dev

按值对2个键哈希进行排序

来自分类Dev

JavaScript按2个值对数组进行排序

来自分类Dev

按2个属性对对象数组进行排序

来自分类Dev

按日期的2个属性对对象数组进行排序

来自分类Dev

PHP-如何按值对2个变量进行排序?

来自分类Dev

按 2 个属性对模型列表进行排序

来自分类Dev

MongoDb按其他集合中的计数对集合进行排序

来自分类Dev

如何对具有2个int参数的ArrayList进行排序?

来自分类Dev

通过ID数组对Laravel集合进行排序

来自分类Dev

通过 hasMany 关系对 laravel 集合进行排序

来自分类Dev

按多个参数对链表进行排序

来自分类Dev

Prolog,按参数对事实进行排序

来自分类Dev

通过按多个条件对集合进行排序来对集合进行排序

来自分类Dev

按2个字段的总和对数据进行排序,然后按降序对数据进行排序

来自分类Dev

替代方法:使用“键功能”按两个参数对列表进行排序

来自分类Dev

按与当前GPS位置的距离对GPS位置集合进行排序

Related 相关文章

  1. 1

    Laravel按日期对集合进行排序

  2. 2

    LISP按2个参数对列表进行排序

  3. 3

    按另一个数组对 Laravel 集合进行排序

  4. 4

    按日期对laravel 5.1集合响应进行排序

  5. 5

    按两个不同的属性对集合进行排序

  6. 6

    linq按2个参数排序

  7. 7

    如何按相关集合属性过滤的相关集合计数对集合(如前20个)进行排序?

  8. 8

    如何按相关集合属性过滤的相关集合计数对集合(如前20个)进行排序?

  9. 9

    按一个属性对集合进行排序,如果为空,则按不同的属性进行排序

  10. 10

    Jekyll:无法按日期对集合进行排序

  11. 11

    按一个属性对集合进行排序,如果为空,则按不同属性进行排序

  12. 12

    按另一个数组对集合进行排序

  13. 13

    按2个属性对对象数组进行排序

  14. 14

    按值对2个键哈希进行排序

  15. 15

    JavaScript按2个值对数组进行排序

  16. 16

    按2个属性对对象数组进行排序

  17. 17

    按日期的2个属性对对象数组进行排序

  18. 18

    PHP-如何按值对2个变量进行排序?

  19. 19

    按 2 个属性对模型列表进行排序

  20. 20

    MongoDb按其他集合中的计数对集合进行排序

  21. 21

    如何对具有2个int参数的ArrayList进行排序?

  22. 22

    通过ID数组对Laravel集合进行排序

  23. 23

    通过 hasMany 关系对 laravel 集合进行排序

  24. 24

    按多个参数对链表进行排序

  25. 25

    Prolog,按参数对事实进行排序

  26. 26

    通过按多个条件对集合进行排序来对集合进行排序

  27. 27

    按2个字段的总和对数据进行排序,然后按降序对数据进行排序

  28. 28

    替代方法:使用“键功能”按两个参数对列表进行排序

  29. 29

    按与当前GPS位置的距离对GPS位置集合进行排序

热门标签

归档