私はXMLのようなカテゴリツリーを持っています
<cat name='cat_1' id='1'>
<cat name='cat_2' id='2'>
<cat name='cat_3' id='3'>
</cat>
</cat>
<cat name='cat_4' id='4'>
<cat name='cat_5' id='5'>
<cat name='cat_6' id='6'>
<cat name='cat_7' id='7'>
</cat>
</cat>
</cat>
</cat>
</cat>
ここで、このツリーをトラバースして、名前でカテゴリIDを検索できるようにコードを実装します。つまり、入力がcat_6の場合、結果は6になります。
私がしたこと
$xmlCatTree//は私の単純なxmlオブジェクトです
class MyClass{
public function traverseForId($cat_name , $xmlCatTree )
{
if($xmlCatTree->attributes()->name == $cate_name)
{
return $xmlCatTree->attributes()->id;
}
if(count($item->children())>0){
foreach($item->children() as $child)
{
return $this->traverseForId($cat_name,$child);
} }
}
}
これは単一のブランチに対して完全に機能します。つまり、cat_2の子ノードは正しい結果になりますが、cat_7を検索しても何も返されません。分岐再帰が原因で発生します。これをどうやってコピーするか知りたいです。