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

posted @   pine007  阅读(707)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示

目录导航