元素

时间:2017-01-15 18:18:07

标签: php laravel collections slice

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

  1. id int PK
  2. name varchar
  3. phone int
  4. city varchar
  5. active tinyint
  6. 我选择这种方式来获取按城市分组的电话号码

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

    我希望将集合切片到某个客户端的子集合,换句话说,如果我有以下输出:

    1. John 0123456 Paris
    2. Jake 0255664 Montreal
    3. Jane 0165656 London
    4. Fred 0164465 Toronto
    5. Joan 0556494 Barcelona
    6. Pete 0656897 Roma
    7. 如何进行切片收集以获得最后2个项目(最后4个项目,6个项目......以及我选择的条目中的其他项目) 我知道Laravel有一个切片方法用于收集,但如何动态地做到这一点? 谢谢。

1 个答案:

答案 0 :(得分:4)

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

假设$ name =" Jane"

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

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

现在你可以通过

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

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