2012-08-10 53 views
1

我的阵列转换关联数组元素到对象仅

$arr = array(
    "name" => "Prakash", 
    "tall" => "maybe", 
    "nick_names" => array ("p", "b", "bee", "prak", "new_names" => array("short_name" => "sn", "long_name" => "ln")) 
); 

我希望能够创建从该值可以通过属性被访问的对象。

例如

$obj->name // "PRAKASH" 
$obj->nick_names // array("p", "b", "bee", "prak", "new_names" => (object)) 

我怎么能得到这个?

我似乎能够做到正是我需要通过

$obj = json_decode(json_encode($arr)); 

但很明显,这是不应该做的事情。

谢谢。

回答

2

你可以将它转换成一个stdClass

$obj = (stdClass) $arr; 

注意到,在PHP中的数组是任何可以想象的方式远优于一stdClass

  • 更好的性能
  • 更好的穿越能力
  • 更好的可读性(IMO)
+0

@马特:无。数组在任何方面都更好(性能,遍历能力,可读性)。不知道为什么OP甚至想要这个。 – 2012-08-10 20:37:10

+1

您的意思是$ obj =(object)$ arr?作为(stdClass)$ arr,不起作用。虽然(对象)强制转换不会将“new_names”键转换为对象。 (请检查描述,我在“nick_names”下的新密钥中添加) – 2012-08-10 20:44:04

+0

@PrakashRaman:您想递归地将所有数组转换为对象。在这种情况下,您最好使用json_decode和json_encode。问题仍然存在,你为什么要这样的事情?数组在各方面都更好。 – 2012-08-10 20:50:50