我有一个从XML文件生成的数组,当使用print_r打印时,它显示如下
Array
(
[cxname] => Global CX 87 123
[ipaddress] => 66.240.55.87
[slots] => Array
(
[slot] => Array
(
[0] => Array
(
[slotno] => 1
[cardtype] => 0x24
[modelno] => OP3524J
[label1] => OP
[label2] => Module
[severity] => Minor
)
[1] => Array
(
[slotno] => 2
[cardtype] => 0x25
[modelno] => OP3524K
[label1] => OP
[label2] => Module
[severity] => Major
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
当我像这样打印时,它什么也没显示
echo $dataArray->cxname;
Run Code Online (Sandbox Code Playgroud)
但是下面的代码工作并打印"Global CX 87 123"
echo $dataArray["cxname"];
Run Code Online (Sandbox Code Playgroud)
如何使其工作如上例所示.
这样做:
$dataArray = (object)$dataArray;
Run Code Online (Sandbox Code Playgroud)
它将在stdClass对象中转换数组,并允许您以这种方式使用它.请注意,这只会转换数组的第一级.如果要以这种方式访问所有级别,则必须创建一个函数来递归数组.例如:
<?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)
有关更多信息,请查看http://www.richardcastera.com/blog/php-convert-array-to-object-with-stdclass.要了解类型转换,您还可以阅读http://www.php.net/manual/en/language.types.object.php#language.types.object.casting.