PHP:从递归函数返回一个数组
我有一个像这样的数组:
SimpleXMLElement Object ( [BrowseNodes] => SimpleXMLElement Object ( [BrowseNode] => SimpleXMLElement Object ( [BrowseNodeId] => 969391031 [Name] => Bambine e ragazze [Children] => SimpleXMLElement Object ( [BrowseNode] => Array ( [0] => SimpleXMLElement Object ( [BrowseNodeId] => 969394031 [Name] => Calze ) [1] => SimpleXMLElement Object ( [BrowseNodeId] => 3635837031 [Name] => Felpe ) [2] => SimpleXMLElement Object ( [BrowseNodeId] => 3635838031 [Name] => Giacche ) [3] => SimpleXMLElement Object ( [BrowseNodeId] => 3635839031 [Name] => Guanti da giocatore ) [4] => SimpleXMLElement Object ( [BrowseNodeId] => 969392031 [Name] => Maglie ) [5] => SimpleXMLElement Object ( [BrowseNodeId] => 4351854031 [Name] => Maglie per tifosi ) [6] => SimpleXMLElement Object ( [BrowseNodeId] => 3635840031 [Name] => Magliette da portiere ) [7] => SimpleXMLElement Object ( [BrowseNodeId] => 969393031 [Name] => Pantaloncini ) [8] => SimpleXMLElement Object ( [BrowseNodeId] => 3635841031 [Name] => Pantaloncini da portiere ) [9] => SimpleXMLElement Object ( [BrowseNodeId] => 3635842031 [Name] => Pantaloni ) [10] => SimpleXMLElement Object ( [BrowseNodeId] => 3635843031 [Name] => Tute da ginnastica ) ) ) [Ancestors] => SimpleXMLElement Object ( [BrowseNode] => SimpleXMLElement Object ( [BrowseNodeId] => 969386031 [Name] => Abbigliamento [Ancestors] => SimpleXMLElement Object ( [BrowseNode] => SimpleXMLElement Object ( [BrowseNodeId] => 937258031 [Name] => Calcio [Ancestors] => SimpleXMLElement Object ( [BrowseNode] => SimpleXMLElement Object ( [BrowseNodeId] => 524013031 [Name] => Categorie [IsCategoryRoot] => 1 [Ancestors] => SimpleXMLElement Object ( [BrowseNode] => SimpleXMLElement Object ( [BrowseNodeId] => 524012031 [Name] => Sport e tempo libero ) ) ) ) ) ) ) ) ) ) ) 我需要做的是使用Anchestors构建一个面包屑.列表末尾的那个应该是第一个.所以,作为一个例子: Sport e tempo libero>分类> CALCIO … 我试图用这种方式迭代xml而没有成功: $rec=$result->BrowseNodes->BrowseNode->Ancestors->BrowseNode; $bread=array(); function recursive($r) { do{ $bread[]=$r->BrowseNodeId; recursive($r->Ancestors->BrowseNode); }while(isset($r->Ancestors)); $bread=array_reverse($bread); return $bread; } print_r(recursive($rec)); 我在stackoverflow上发现了类似的东西,但没有任何建议帮助我解决这个问题.
要使用输出创建递归函数,您需要三件事:
>用于保存当前位置的变量或参数,即代码中的$r. 那么,你有两个错误. $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode; $bread = array(); function recursive($r) { global $bread; $bread[] = strval($r->BrowseNodeId); if(isset($r->Ancestors)){ return recursive($r->Ancestors->BrowseNode); }else{ return array_reverse($bread); } } print_r(recursive($rec)); 你去吧 更新:我同意@FlameStorm,如果可能,应该避免全局. 这是改进的代码: $rec = $result->BrowseNodes->BrowseNode->Ancestors->BrowseNode; function recursive($r) { if(isset($r->Ancestors)) $bread = recursive($r->Ancestors->BrowseNode); $bread[] = strval($r->BrowseNodeId); return $bread; } print_r(recursive($rec)); 不再需要函数外部的$bread变量.此外,既不使用全局也不使用静态. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |