将数组转换为对象的更好方法

时间:2018-09-22 04:03:06

标签: php

具有以下数组,

$dataset = [
    ['item1' => 'value1'],
    ['item2' => 'value2'],
    ['item3' => 'value3'],
];

我需要将其转换为这个stdClass对象

$dataset = [
    'item1' => 'value1',
    'item2' => 'value2',
    'item3' => 'value3',
];

为此,我使用了这些嵌套的foreach

$object = new stdClass;

foreach ($dataset as $item) {
    foreach ($item as $key => $value) {
        $object->{$key} = $value;
    }
}

// At this point $object is the expected output

我正在寻找一种更好的方法,可以避免foreach嵌套

最终的预期输出是

stdClass Object
(
    [item1] => value1
    [item2] => value2
    [item3] => value3
)

感谢您的建议。

3 个答案:

答案 0 :(得分:3)

检查此!一切正常

首先array_merge,然后是json_encode的{​​{1}}和json_decode

stdClass

,您也可以将<?php $dataset = [ ['item1' => 'value1'], ['item2' => 'value2'], ['item3' => 'value3'], ]; $dataset = call_user_func_array('array_merge', $dataset); $dataset= json_decode(json_encode($dataset)); echo "<pre>"; print_r($dataset); 用于stdClass之类的

object

有多种获取$dataset=(object) $dataset;//make sure first you merge array 的方法。因此,here is the most valuable answer for stdClass object

答案 1 :(得分:1)

对不起,我错过了您想要展平阵列的位置。我将添加Bilal Ahmed关于合并数组的建议。

对于您的案例,您无需使用json_decode(json_encode($dataset));

但是,请记住,如果您有嵌套数组,那么json_decode(json_encode($dataset));是更好的解决方案。

$dataset = [
    ['item1' => 'value1'],
    ['item2' => 'value2'],
    ['item3' => 'value3'],
];

$dataset = call_user_func_array('array_merge', $dataset);    
$object = (object)$dataset;

echo '<pre>';
print_r($object);
echo '</pre>';

这将输出:

stdClass Object
(
    [item1] => value1
    [item2] => value2
    [item3] => value3
)

答案 2 :(得分:0)

我相信这将是完成工作的一种优雅方式

$dataset = (object)call_user_func_array('array_merge', $dataset);

print_r($dataset);
相关问题