【问题标题】:Laravel slice collection after an element元素后的 Laravel 切片集合
【发布时间】:2017-05-30 14:18:39
【问题描述】:

所以我有这个模型,它将命名客户 客户有

  1. id int PK
  2. 名称变量
  3. 电话号码
  4. 城市变量
  5. 活动的 tinyint

我选择这种方式来获取按城市分组的电话号码

return Clients::select('name','phone','city')->selectSub('lpad(phone,1,'0'))->where('active',1)->groupBy('city')->paginate(10);

如果我有以下输出,我想从某个客户端将集合切片为子集合:

  1. 约翰 0123456 巴黎
  2. 杰克 0255664 蒙特利尔
  3. 简 0165656 伦敦
  4. 弗雷德 0164465 多伦多
  5. 琼 0556494 巴塞罗那
  6. 皮特 0656897 罗马

我如何继续对该集合进行切片以获得最后 2 个项目(最后 4 个项目,6 个项目......换句话说,来自我选择的条目) 我知道 Laravel 有一个用于集合的切片方法,但是如何动态地做到这一点? 谢谢。

【问题讨论】:

    标签: php laravel collections slice


    【解决方案1】:
    $records = Clients::select('name','phone','city')->selectSub('lpad(phone,1,'0'))->where('active',1)->groupBy('city')->paginate(10);
    

    假设 $name = "简"

    $value = collect($records)->filter(function($value) use ($name) {
        return $value->name === $name;
    })->keys()->first();
    

    这里 $value 将保存 Jane 的索引。

    现在你可以通过

    实现切片了
    $records = collect($records)->slice($value, 2)->all();
    

    但是有一个副作用,如果没有找到名字,你会得到 $value 为空。在处理切片之前检查 $value 是否为空。

    【讨论】:

    • 我知道这一点,但我想要实现的是有一个参数,集合从中被分割。 Laravel 的集合切片使用全局索引,$mycollection->slice(3) 将从第四个开始切片,我想要一种方法来获取集合中某项的索引
    • 找不到你。你能再简单介绍一下吗?
    • 所以考虑到帖子中提到的输出,假设我想获取“Jane”之后的所有条目,我该怎么做。以此类推,对于所有其他“客户端”,我输入一个名称,一个函数获取其索引并获取以下条目。
    • 你可以使用拼接。使用您拥有的索引,在集合上运行 splice。像 collect($records)->splice($value);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多