我的查询返回一个数组,但我需要一个包含该数组的对象。
例如我的数组:
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;
}
这不起作用会创建一个对象,但我的数组不在。
我怎样才能实现我想要做的......?
答案 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"
}
}
}