首页 > 其他分享 >laravel collection keyBy 多字段

laravel collection keyBy 多字段

时间:2022-08-18 19:14:07浏览次数:67  
标签:laravel name -- age keyBy class array zhangsan 多字段

1、场景

二维数组中,如果要取出满足多个字段条件的数据时,通常使用遍历的方式。

laravel 提供collection keyBy 可以将多个字段格式化作为键名,不用写foreach遍历。

2、例子

  • 需求:获取 班级=one,学生姓名=zhangsan 的年龄
$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()

$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

标签:laravel,name,--,age,keyBy,class,array,zhangsan,多字段
From: https://www.cnblogs.com/pine007/p/16599785.html

相关文章