数组到对象的转换

时间:2015-08-19 09:45:20

标签: php arrays

我的查询返回一个数组,但我需要一个包含该数组的对象。

例如我的数组:

Array(
    "key1" => "value1",
    "key2" => "value2",
    "key3" => "value3"
);

所以我要做的是创建一个\ StdClass并在其中添加此数组。理想情况下,我希望最终产品看起来像这样:

object(stdClass) {"test"=>array(1) {object(stdClass)(3) {"key1" => "value1", "key2" => "value2", "key3" => "value3"}} }

我创建了一个函数arrayToObject:

public function arrayToObject(array $array)
{
    $test = new \StdClass($array);

    return $test;
}

这不起作用会创建一个对象,但我的数组不在。

我怎样才能实现我想要做的......?

3 个答案:

答案 0 :(得分:0)

你可以通过使用(我认为最干净的解决方案)来做到这一点:

$obj = json_decode(json_encode($array), FALSE);

另一个解决方案是创建空的stdClass,然后使用foreach(并使用public function arrayToObject(array $array) { $test = new \StdClass($array); foreach ($array as $key => $value) { $test->$key = $value; } return $test; } )并使用数组数据填充它。

let option = new OptionModel({
  value: 'test',
  vote: 0
});

答案 1 :(得分:0)

您还可以使用containers.Map并将其转换为foreach

object

答案 2 :(得分:0)

\stdClass没有接受数组作为参数的构造函数。您可以将数组显式添加为属性。尝试:

function arrayToObject(array $array, $property = 'myArrayProperty')
{
    $test = new \StdClass($array);
    $test->{$property} = $array;

    return $test;
}

$arr = ['foo' => 1, 'bar' => 2];
$obj = arrayToObject($arr);

// `echo $obj->myArrayProperty['foo']` => 1

print_r($obj)

这会产生:

stdClass Object
(
    [myArrayProperty] => Array
        (
            [foo] => 1
            [bar] => 2
        )

)

除非您想将数组实际转换为对象(在我的视图中更有用),其中数组键成为对象属性。在这种情况下,您可以执行直接演员:

$arr = [
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
];

$obj = (object) $arr;

print_r($obj);

收率:

stdClass Object
(
    [key1] => value1
    [key2] => value2
    [key3] => value2
)

通过以下方式访问:

echo $obj->key1; // 'value1'

希望这会有所帮助:)

修改

我仔细看了一下你想要的示例输出。您想要创建一个\stdClass对象,其属性为test。这是一个包含一个元素的数组:一个嵌套的\stdClass对象,包含数组中的属性和值。

你在找这样的东西吗?

$arr = [
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key3' => 'value3'
];

$obj = new \stdClass();
$obj->test = [(object) $arr];

var_dump($obj);

收率:

class stdClass#1 (1) {
  public $test =>
  array(1) {
    [0] =>
    class stdClass#2 (3) {
      public $key1 =>
      string(6) "value1"
      public $key2 =>
      string(6) "value2"
      public $key3 =>
      string(6) "value3"
    }
  }
}