【问题标题】:Rename Laravel Collection Key重命名 Laravel 集合键
【发布时间】:2021-06-11 05:11:15
【问题描述】:

我有一套数据字典$dataDictCollection

"column_a" => "Column A",
"column_b" => "Column B",
"column_c" => "Column C",
"column_d" => "Column D",
"column_e" => "Column E",

我还有一组结果$resultCollection

[{
    "column_a" => "value 100",
    "column_b" => "value 200",
    "column_c" => "value 300",
    "column_d" => "value 400",
    "column_e" => "value 500",
},{
    "column_a" => "value 110",
    "column_b" => "value 220",
    "column_c" => "value 330",
    "column_d" => "value 440",
    "column_e" => "value 550",
}]

在结果中,我希望将数据字典的值作为结果的键。例如:

"Column A" => "value 100",
"Column B" => "value 200",
"Column C" => "value 300",
"Column D" => "value 400",
"Column E" => "value 500",

请注意,我的列数很多,我无法像下面那样指定键名。

return $data['Column A'] = 'value 100';

我尝试了mapWithKeyskeyBy,但我不知道如何返回我想要的结果。

我试过了

return collect($resultCollection)->map(function ($result) use ($dataDictCollection) {
    return collect($dataDictCollection)->map(function ($dataDic) use ($result) {
        $name[$dataDic] = $result[$dataDic];
        return $name;
    });
});

但它返回这个:(

"column_a": {
    "Column A": "value 100"
},
"column_b": {
    "Column B": "value 200"
},

又一次尝试

return collect($resultCollection)->map(function ($result) use ($dataDictCollection) {
    return collect($result)->combine($dataDictCollection);
})->values();

但它会像这样返回,反转并且不返回完整的数据字典。

[{
    "value 100" => "Column A",
    "value 200" => "Column B",
    "value 300" => "Column C",
},{
    "value 110" => "Column A",
    "value 220" => "Column B",
    "value 330" => "Column C",
}]    

【问题讨论】:

  • 你试过$name= $deal[$dataDic];这个
  • @A.ANoman 我得到了Illegal offset type

标签: laravel laravel-collection


【解决方案1】:

你可以使用combine的方法收集

$resultCollection = collect([
    "column_a" => "Column A",
    "column_b" => "Column B",
    "column_c" => "Column C",
    "column_d" => "Column D",
    "column_e" => "Column E",
])->sortKeys();

$dataDictCollection = collect([[
    "column_a" => "value 100",
    "column_b" => "value 200",
    "column_c" => "value 300",
    "column_d" => "value 400",
    "column_e" => "value 500",
], [
    "column_a" => "value 110",
    "column_b" => "value 220",
    "column_c" => "value 330",
    "column_d" => "value 440",
    "column_e" => "value 550",
]]);

$result = collect();
$dataDictCollection->each(function ($item, $key) use ($result, $resultCollection) {
    $result->push($resultCollection->combine(collect($item)->sortKeys())->all());
});

dd($result->all());

【讨论】:

  • 我收到一个错误:array_combine():两个参数应该有相同数量的元素。因为我会有多组 $resultCollection 而只有一组 $dateDictCollection。
  • 给出一些实时数据。
  • 已添加到问题中,请参阅$resultCollection
  • 太棒了!!你得到了我想要的。太感谢了。 :)
猜你喜欢
  • 2021-04-09
  • 2017-12-08
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多