我有一个从 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
)
)
)
)
当我这样打印时,它什么也没有显示
echo $dataArray->cxname;
但以下代码有效并打印“Global CX 87 123”
echo $dataArray["cxname"];
如何让它像上面的例子一样工作。
最佳答案
只需这样做:
$dataArray = (object)$dataArray;
它会将数组转换为 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;
}
}
有关更多信息,请查看 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 .
关于PHP访问命名数组元素问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6501984/