如何在php中使用嵌套数组和对象的递归函数?
我使用simplexmlelement在foreach循环中输出了这样一个数组如何在php中使用嵌套数组和对象的递归函数?,php,arrays,recursion,simplexml,Php,Arrays,Recursion,Simplexml,我使用simplexmlelement在foreach循环中输出了这样一个数组 array(16) { ["Binding"]=> string(11) "Electronics" ["Brand"]=> string(8) "Micromax" ["Feature"]=> array(4) { [0]=> string(29) "80 centimeters LED 1366 x 768" [1]=> str
array(16) {
["Binding"]=>
string(11) "Electronics"
["Brand"]=>
string(8) "Micromax"
["Feature"]=>
array(4) {
[0]=>
string(29) "80 centimeters LED 1366 x 768"
[1]=>
string(55) "Connectivity - Input: HDMI*1, USB*1, Component*1, VGA*1"
[2]=>
string(405) "Installation: For requesting installation/wall mounting/demo of this product once delivered, please directly call Micromax support on 1860-500-8899."
[3]=>
string(88) "Warranty Information: 1 year warranty provided by the manufacturer from date of purchase"
}
["ItemDimensions"]=>
object(SimpleXMLElement)#300 (4) {
["Height"]=>
string(4) "1693"
["Length"]=>
string(4) "2898"
["Weight"]=>
string(4) "1213"
["Width"]=>
string(3) "315"
}
["Label"]=>
string(8) "Micromax"
["Manufacturer"]=>
string(8) "Micromax"
["Model"]=>
string(10) "32T7250MHD"
["MPN"]=>
string(14) "MCX_32T7250MHD"
["PackageDimensions"]=>
object(SimpleXMLElement)#301 (4) {
["Height"]=>
string(3) "680"
["Length"]=>
string(4) "3250"
["Weight"]=>
string(4) "2015"
["Width"]=>
string(4) "2260"
}
["PackageQuantity"]=>
string(1) "1"
["PartNumber"]=>
string(14) "MCX_32T7250MHD"
["ProductGroup"]=>
string(2) "CE"
["ProductTypeName"]=>
string(10) "TELEVISION"
["Publisher"]=>
string(8) "Micromax"
["Studio"]=>
string(8) "Micromax"
["Title"]=>
string(52) "Micromax 32T7250MHD 80cm (32 inches) HD Ready LED TV"
}
我使用一个递归函数来输出从这个数组到html的几乎所有内容。我的递归函数如下所示:
function recurseTree($var){
$out = '<li>';
foreach($var as $k=>$v){
if( is_array($v) || is_object($v) ){
$out .= '<ul>'.recurseTree($v).'</ul>';
}else{
$out .= '<li>' .$k .': ' .$v .'</li>';
}
}
return $out.'</li>';
}
<ul>
<li></li>
<li>Binding: Electronics</li>
<li>Brand: Micromax</li>
<ul>
<li></li>
<li>0: 80 centimeters LED 1366 x 768</li>
<li>1: Connectivity - Input: HDMI*1, USB*1, Component*1, VGA*1</li>
<li>2: Installation: For requesting installation/wall mounting/demo of this product once delivered, please directly call Micromax support on 1860-500-8899.</li>
<li>3: Warranty Information: 1 year warranty provided by the manufacturer from date of purchase</li>
</ul>
<ul>
<li>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
</li>
</ul>
<li>Label: Micromax</li>
<li>Manufacturer: Micromax</li>
<li>Model: 32T7250MHD</li>
<li>MPN: MCX_32T7250MHD</li>
<ul>
<li>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
</li>
</ul>
<li>PackageQuantity: 1</li>
<li>PartNumber: MCX_32T7250MHD</li>
<li>ProductGroup: CE</li>
<li>ProductTypeName: TELEVISION</li>
<li>Publisher: Micromax</li>
<li>Studio: Micromax</li>
<li>Title: Micromax 32T7250MHD 80cm (32 inches) HD Ready LED TV</li>
</ul>
function recurseTree($var){
$output = '';
foreach($var as $k=>$v){
if( is_array($v) || is_object($v) ){
$output .= '<li>' . $k . '<ul>'.recurseTree($v).'</ul></li>';
}else{
$output .= '<li>' .$k .': ' .$v .'</li>';
}
}
return $output;
}
如何使用递归函数输出这些对象?还请注意,数组的键名称也丢失(例如:名称[“功能”]
未显示在输出中)
如何输出这些丢失的数据?谢谢。数组的键没有出现,因为在查找数组/对象时,您根本没有在if条件下使用它们。我会将函数修改为如下内容:
function recurseTree($var){
$out = '<li>';
foreach($var as $k=>$v){
if( is_array($v) || is_object($v) ){
$out .= '<ul>'.recurseTree($v).'</ul>';
}else{
$out .= '<li>' .$k .': ' .$v .'</li>';
}
}
return $out.'</li>';
}
<ul>
<li></li>
<li>Binding: Electronics</li>
<li>Brand: Micromax</li>
<ul>
<li></li>
<li>0: 80 centimeters LED 1366 x 768</li>
<li>1: Connectivity - Input: HDMI*1, USB*1, Component*1, VGA*1</li>
<li>2: Installation: For requesting installation/wall mounting/demo of this product once delivered, please directly call Micromax support on 1860-500-8899.</li>
<li>3: Warranty Information: 1 year warranty provided by the manufacturer from date of purchase</li>
</ul>
<ul>
<li>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
</li>
</ul>
<li>Label: Micromax</li>
<li>Manufacturer: Micromax</li>
<li>Model: 32T7250MHD</li>
<li>MPN: MCX_32T7250MHD</li>
<ul>
<li>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
<ul>
<li></li>
</ul>
</li>
</ul>
<li>PackageQuantity: 1</li>
<li>PartNumber: MCX_32T7250MHD</li>
<li>ProductGroup: CE</li>
<li>ProductTypeName: TELEVISION</li>
<li>Publisher: Micromax</li>
<li>Studio: Micromax</li>
<li>Title: Micromax 32T7250MHD 80cm (32 inches) HD Ready LED TV</li>
</ul>
function recurseTree($var){
$output = '';
foreach($var as $k=>$v){
if( is_array($v) || is_object($v) ){
$output .= '<li>' . $k . '<ul>'.recurseTree($v).'</ul></li>';
}else{
$output .= '<li>' .$k .': ' .$v .'</li>';
}
}
return $output;
}
函数recurseTree($var){
$output='';
foreach($var为$k=>$v){
if(is_数组($v)| is_对象($v)){
$output.=''.$k.'.recurseTree($v)。'
';
}否则{
$output.=''.$k.'.$v. ';
}
}
返回$output;
}
至于为什么不返回对象键/值,我不太确定。我已经用SimpleXmlElement对象和stdClass对此进行了测试,它们都工作得很好@georaldc数组键现在在我使用修改后的函数后出现。但是这些嵌套数组的值仍然没有出现在输出中。@fusion3k您是否使用我在问题中给出的数组进行了测试?我怀疑数组中有问题,因为我没有得到嵌套数组的值。发布从xml读取开始的代码和原始xml(或指向它的URL)@georaldc和@fusion3k我刚才在@georaldc answer上进行了扩展,并在
if
条件中添加了$v
,作为:“$out.=”- ”.recurseTree($v)。“