我有一个从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"];
如何使其如上例所示。
答案 0 :(得分:7)
这样做:
$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。
答案 1 :(得分:3)
此:
echo $dataArray["cxname"];
是访问数组元素的方式。但是这个:
echo $dataArray->cxname;
就是这样,您可以访问class members。
如果要以类成员的身份访问数据,则必须使用返回类(或对象)的xml解析器,而不是数组。
如果您有XML字符串,可以使用simplexml_load_string()将其解析为对象。