我正在寻找一种将php关联数组转换为对象数组并对每个关联进行键控的方法。我也可以将其视为两个单独的简单数组,一个带有名称,一个带有类。这是一个关联的示例...
array:2 [
"someName" => "someClass"
"someOtherName" => "someOtherClass"
]
或
names => [0 => 'name1', 1 => 'name2']
classes => [0 => 'class1', 1 => 'class2']
...无论哪种方式,我都在寻找这样的最终结果:
[
{ 'name': 'someName', 'class': 'someClass' },
{ 'name': 'someOtherName', 'class': 'someOtherClass' }
]
最聪明的方法是什么?
答案 0 :(得分:1)
我认为最好的方法是将zip方法与transform或map结合起来:
$names = [0 => 'name1', 1 => 'name2'];
$classes = [0 => 'class1', 1 => 'class2'];
$merged = collect($names)->zip($classes)->transform(function ($values) {
return [
'name' => $values[0],
'class' => $values[1],
];
});
dd($merged->all());
结果是得到数组:
array:2 [▼
0 => array:2 [▼
"name" => "name1"
"class" => "class1"
]
1 => array:2 [▼
"name" => "name2"
"class" => "class2"
]
]
因此,如果您需要json,则只需使用json_encode($merged)
答案 1 :(得分:0)
此输出与您的第一个块相同。
$array = ['someName' => 'someClass', 'someOtherName' => 'someOtherClass'];
您还可以使用laravel集合,它提供了一个流畅,方便的包装器来处理数据数组。例如,查看以下代码。
$collection = collect([
'names' => [
['0' => 'name1', '1' => 'name2'],
],
'classes' => [
['0' => 'class1', '2' => 'class2']
],
]);
还有一种您想要的方法组合,combine
方法将集合的值(作为键)与另一个数组或集合的值相结合:在https://laravel.com/docs/5.7/collections处了解更多信息>