PHP访问命名数组元素问题

Aja*_*ayR 4 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
                        )

                )

        )

)
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)

如何使其工作如上例所示.

Fra*_*nes 7

这样做:

$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.