

新闻资讯
技术学院本文介绍如何在 laravel 或原生 php 中,将数组或集合中每个子项的指定字段(如 date)的值提取出来,作为该子项的新顶层键名,并保留对应值(如 rate),实现从关联结构到键值映射的转换。
在实际开发中,我们常遇到需要“以某字段值为键、其余数据为值”的场景。例如原始数据形如:
$data['ENFERMERIA'] = [
[
'date' => '2025-01-01T00:00:00.000000Z',
'rate' => 100.00,
'send' => true,
'open_date' => '2025-01-01',
'name' => 'Nursing Dept'
],
[
'date' => '2025-01-02T00:00:00.000000Z',
'rate' => 95.50,
'send' => false,
'open_date' => '2025-01-02',
'name' => 'Nursing Dept'
]
];目标是将其转换为:
[
'2025-01-01T00:00:00.000000Z' => 100.00,
'2025-01-02T00:00:00.000000Z' => 95.50
]✅ 推荐方案(适用于数组 & Collection):
若原始数据是普通 PHP 数组,使用 array_map() + array_column() 组合更简洁:
$result = array_column($data['ENFERMERIA'], 'rate', 'date'); // 输出:['2025-01-01T00:00:00.000000Z' => 100.00, ...]
若使用 Laravel Collection,链式调用更优雅:
$collection = collect($data['ENFERMERIA']);
$result = $collection->pluck('rate', 'date')->all();
// 同样返回键值映射数组⚠️ 注意事项:
$result = collect($data['ENFERMERIA'])
->mapWithKeys(fn($item) => [$item['date'] => $item])
->all();? 小结:优先使用 array_column()(数组)或 pluck()(Collection)实现高效键值重映射;避免手动遍历拼接,既简洁又符合 Laravel 惯例。