PHP / Laravel-从两个简单数组或结合了这两个的关联数组创建对象数组

时间:2018-10-05 19:06:23

标签: php arrays laravel object laravel-5

我正在寻找一种将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' }
]

最聪明的方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是将zip方法与transformmap结合起来:

$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处了解更多信息