laravel collection keyBy 多字段
1、场景
二维数组中,如果要取出满足多个字段条件的数据时,通常使用遍历的方式。
laravel 提供collection keyBy 可以将多个字段格式化作为键名,不用写foreach遍历。
2、例子
- 需求:获取 班级=one,学生姓名=zhangsan 的年龄
copy$arr = [
['class'=>'one', 'name'=>'zhangsan', 'age'=>10],
['class'=>'one', 'name'=>'lisi', 'age'=>12],
['class'=>'two', 'name'=>'zhangsan', 'age'=>13],
];
$arr2 = collect($arr)->keyBy(function ($item) {
return sprintf("%s--%s", $item['class'], $item['name']);
})->toArray();
$index = 'one--zhangsan';
$age = $arr2[$index]['age'];
dd($arr2, $age)
-- $arr2
array:3 [
"one--zhangsan" => array:3 [
"class" => "one"
"name" => "zhangsan"
"age" => 10
]
"one--lisi" => array:3 [
"class" => "one"
"name" => "lisi"
"age" => 12
]
"two--zhangsan" => array:3 [
"class" => "two"
"name" => "zhangsan"
"age" => 13
]
]--age
10
-
需求:获取 班级=一班,学生姓名=张三的年龄
如果包含了中文可以使用md5()
copy$arr = [
['class'=>'一班', 'name'=>'张三', 'age'=>10],
['class'=>'一班', 'name'=>'李四', 'age'=>12],
['class'=>'二班', 'name'=>'张三', 'age'=>13],
];
$arr2 = collect($arr)->keyBy(function ($item) {
return md5(sprintf("%s--%s", $item['class'], $item['name']));
})->toArray();
$index = md5('一班--张三');
$age = $arr2[$index]['age'];
dd($arr2, $age)
-- $arr2
array:3 [
"c887267af34dc5377944fdf3683cfba3" => array:3 [
"class" => "一班"
"name" => "张三"
"age" => 10
]
"c69ba3d2fd0e5514faf685c1505284b0" => array:3 [
"class" => "一班"
"name" => "李四"
"age" => 12
]
"3eac8feafcfc67737a54ddb074f40a50" => array:3 [
"class" => "二班"
"name" => "张三"
"age" => 13
]
]--age
10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构