繁体   English   中英

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

[英]PHP/Laravel - Create an array of objects from two simple arrays or an associative array that combines that two

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

最聪明的方法是什么?

我认为最好的方法是将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)

此输出在您的第一个块上是相同的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM