很抱歉,排版有点乱。其中上面的函数object2array是一个递归调用的函数,希望大家能看明白我的问题,感激不尽!

解决方案 »

  1.   

    要得到这样的结果?
    array(5) {
      ["basic_info"]=>
      array(13) {
        ["product_id"]=>
        string(5) "31336"
        ["product_name"]=>
        string(23) "惠普 Presario B2804TX"
        ["product_type"]=>
        string(16) "Presario B2804TX"
        ["small_class_id"]=>
        string(2) "60"
        ["small_class_name"]=>
        string(15) "笔记本电脑"
        ["brand_id"]=>
        string(2) "77"
        ["brand_name"]=>
        string(9) "HP|惠普"
        ["series_id"]=>
        string(4) "3302"
        ["series_name"]=>
        string(20) "自由人B2800系列"
        ["big_pic_url"]=>
        string(47) "http://product.pchome.net/00/03/13/36/31336.jpg"
        ["small_pic_url"]=>
        string(48) "http://product.pchome.net/00/03/13/36/31336s.jpg"
        ["enter_db_date"]=>
        string(10) "1970-01-01"
        ["bitthday"]=>
        string(10) "2005-12-20"
      }
      ["comment_info"]=>
      array(4) {
        ["description"]=>
        string(1050) "作为时尚本本的风向标,B2800极佳的显示性能更将其带上了全新的高度。使用了 ATI Mobility Radeon X600SE 最新的独立显卡,即使是经典眩目的3D游戏也能游刃有余地进行。对于格式化了的笔记本电脑人们已经看得太多,B2800让用户无须在理性消费中放弃对审美情趣的追求,让用户充分体验B2800带来的多媒体乐趣。支持双层刻录的DVD刻录机,轻松留住美好记忆,4合一读卡器实现数码存储的无忧应用,S端子和SPDIF数字输出提供高品质的影音娱乐,内置的立体麦克风用交流代替了孤独,环绕立体声的音箱以放松代替了适应。B2800采用了HP引以为荣的BrightView高亮显示屏技术,在阳光下,屏幕显示仍旧逼真清晰,图像栩栩如生,带给用户绝佳的影音享受。B2800流线型的外观设计、仅为1.9kg的超轻重量,更加时尚和便携。支持蓝牙和WIFI多种无线连接方式,一键上网,B2800以创造性和自由打破了轻薄低性能的定律。"
        ["good_comment"]=>
        NULL
        ["bad_comment"]=>
        NULL
        ["score"]=>
        string(2) "85"
      }
      ["price_info"]=>
      array(4) {
        ["price"]=>
        string(1) "0"
        ["min_price"]=>
        string(1) "0"
        ["max_price"]=>
        string(1) "0"
        ["time"]=>
        string(10) "0000-00-00"
      }
      ["parameter_info"]=>
      array(9) {
        ["软件系统"]=>
        string(76) "随机附件:;附带软件:;预装操作系统:Microsoft Windows XP家庭版"
        ["电力规格"]=>
        string(94) "电源:;充电时间(小时):;工作时间(小时):;电池类型:6节锂离子电池,4800mAh"
        ["外观特征"]=>
        string(91) "高度(mm):;宽度(mm):;长度(mm):;重量(kg):1.96;机壳材料:;光驱软驱位置:内置"
        ["输入输出"]=>
        string(263) "图形接口:PCI-E;PCMCIA槽数:1个,Type II;I/O接口:VGA、USB2.0(4)、IEEE1394、RJ-11、RJ-45、耳机插孔(1)、麦克风插孔(1)、AC适配器、S视频输出、Kensington锁、SPDIF(通过耳机输出连接的适配器提供支持);指取设备:触摸板"
        ["网络"]=>
        string(79) "网卡:10/100M以太网卡,Intel Pro/无线2200 802.11b/g;调制解调器:56K"
        ["视频/音频"]=>
        string(69) "音频系统:AC97;显存容量(MB):128;显示芯片:ATI Radeon X600SE"
        ["显示屏"]=>
        string(98) "标准分辨率(dpi):1280*800;显示屏尺寸(英寸):14;显示屏类型:BrightView高亮显示屏"
        ["存储设备"]=>
        string(76) "内置软驱:无;光驱倍速:;光驱类型:DVD刻录机;硬盘容量(GB):80"
        ["基本规格"]=>
        string(279) "其它功能:;最大支持内存(MB):2048;标准内存容量(MB):512;内存类型:DDR2;总线频率(MHz):533;主板芯片组:Intel 915PM;二级缓存(KB):2048;处理器主频(MHz):1866;处理器类型:Intel Pentium M 750;处理器品牌:INTEL;产品名称:惠普 Presario B2804TX"
      }
      ["pic_info"]=>
      array(2) {
        ["small_pic_list"]=>
        NULL
        ["big_pic_list"]=>
        NULL
      }
    }如果是,请将
    $return[$b] = object2array($value);
    改为
    list(,$k) = each($b);
    $return[$k] = object2array($value);因为$b 是 SimpleXMLElement 对象,不能把他用做下标
    前面的
    foreach ($data->item->parameter_info->$key->attributes() as $a =>$b) {
          echo $a."=".$b."<br>";
    之所以也能输出正确的结果是因为__toString方法被定义了__toString
    The __toString method allows a class to decide how it will react when it is converted to a string. 例子 19-25. Simple example<?php
    // Declare a simple class
    class TestClass
    {
        public $foo;    public function __construct($foo) {
            $this->foo = $foo;
        }    public function __toString() {
            return $this->foo;
        }
    }$class = new TestClass('Hello');
    echo $class;
    ?>  上例将输出:Hello
    也就是说,对象是可以根据上下文来决定数据类型的
    于是尝试了一下:
    $return[$b] = object2array($value);
    改为
    $return["$b"] = object2array($value);
    结果也是正确的了