简单解析xml时遇到的问题,求教各位方家! 很抱歉,排版有点乱。其中上面的函数object2array是一个递归调用的函数,希望大家能看明白我的问题,感激不尽! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要得到这样的结果?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方法被定义了__toStringThe __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 classclass 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);结果也是正确的了 svn与bugfree整合问题求助 请教各位大侠 smarty模板中定义变量 咋老是出错呀?为什么实现不了刷新 请问google.com/search?q=aa方式URL如何实现? 正规则表达获取字符串问题 关于类方法显示问题 写过smarty的插件的朋友帮忙解决这个问题 数据保存不到mysql中去! 魔术方法__set 为何直接ECHO 无效呢? 一个很奇怪的问题:time()时间戳为什么会返回一个标准时间格式的内容? 偶初学PHP在看《php编程设计》有个问题:什么是资源?
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);
结果也是正确的了