PHP访问命名数组元素问题

时间:2011-06-28 05:33:14

标签: php arrays

我有一个从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"];

如何使其如上例所示。

2 个答案:

答案 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()将其解析为对象。