在PHP中,您可以使用以下表示法快速初始化具有值的数组:
$array = array("name" => "member 1", array("name" => "member 1.1") ) ....
Run Code Online (Sandbox Code Playgroud)
有没有办法为STDClass对象做这个?我不知道比沉闷更短的路
$object = new STDClass();
$object->member1 = "hello, I'm 1";
$object->member1->member1 = "hello, I'm 1.1";
$object->member2 = "hello, I'm 2";
Run Code Online (Sandbox Code Playgroud)
Gum*_*mbo 41
你可以使用类型转换:
$object = (object) array("name" => "member 1", array("name" => "member 1.1") );
Run Code Online (Sandbox Code Playgroud)
nic*_*kl- 25
我也将Gumbo投票作为首选解决方案,但他所建议的并不是所要求的,这可能会导致一些混淆,为什么member1o
看起来更像是一个member1a
.
为了确保现在这一点很清楚,stdClass
在php中生成相同的两种方式(现在是5.4以来的3种方式).
根据问题的长期或手动方法:
$object = new stdClass;
$object->member1 = "hello, I'm 1";
$object->member1o = new stdClass;
$object->member1o->member1 = "hello, I'm 1o.1";
$object->member2 = "hello, I'm 2";
Run Code Online (Sandbox Code Playgroud)ala Gumbo的建议是从阵列中投射一个物体的较短或单行版本(为了清晰起见而扩展).
$object = (object)array(
'member1' => "hello, I'm 1",
'member1o' => (object)array(
'member1' => "hello, I'm 1o.1",
),
'member2' => "hello, I'm 2",
);
Run Code Online (Sandbox Code Playgroud)PHP 5.4+缩短的数组声明样式
$object = (object)[
'member1' => "hello, I'm 1",
'member1o' => (object)['member1' => "hello, I'm 1o.1"],
'member2' => "hello, I'm 2",
];
Run Code Online (Sandbox Code Playgroud)两者都会产生完全相同的结果:
stdClass Object
(
[member1] => hello, I'm 1
[member1o] => stdClass Object
(
[member1] => hello, I'm 1o.1
)
[member2] => hello, I'm 2
)
Run Code Online (Sandbox Code Playgroud)
的nJoy!
从显示类型转换和使用递归函数将单维和多维数组转换为标准对象的帖子:
<?php
function arrayToObject($array) {
if (!is_array($array)) {
return $array;
}
$object = new stdClass();
if (is_array($array) && count($array) > 0) {
foreach ($array as $name=>$value) {
$name = strtolower(trim($name));
if (!empty($name)) {
$object->$name = arrayToObject($value);
}
}
return $object;
}
else {
return FALSE;
}
}
Run Code Online (Sandbox Code Playgroud)
本质上,您构造一个函数,接受$array
并迭代其所有键和值.它使用键将值分配给类属性.
如果值是数组,则再次(递归地)调用该函数,并将其输出指定为值.
上面的示例函数正是如此; 然而,逻辑可能与你自然想到的过程有点不同.
您可以使用 :
$object = (object)[]; // shorter version of (object)array();
$object->foo = 'bar';
Run Code Online (Sandbox Code Playgroud)
你可以尝试:
function initStdClass($thing) {
if (is_array($thing)) {
return (object) array_map(__FUNCTION__, $thing);
}
return $thing;
}
Run Code Online (Sandbox Code Playgroud)
我使用一个我命名为 Dict 的类:
class Dict {
public function __construct($values = array()) {
foreach($values as $k => $v) {
$this->{$k} = $v;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它还具有与其他对象和数组合并的功能,但这有点超出了这个问题的范围。
归档时间: |
|
查看次数: |
36580 次 |
最近记录: |