所以我有一些XML我需要循環通過孩子找到一個孩子的價值。問題是實際的循環。我知道的方式是製作一個功能,如果有一個孩子,使用相同的功能,並循環通過孩子 - 再次,第四。PHP - 我如何使一個函數等待並返回另一個函數值
我的問題是,它看起來好像該函數正在等待「子函數」在返回我的值之前完成。
有沒有更好的方法來做到這一點?我知道有回調,但我不確定我怎麼會在這裏實現它
示例XML
<?xml version="1.0" standalone="yes"?>
<pages>
<page>
<title>Parent Page1</title>
<id>0</id>
<children>
<page>
<title>Child Page1</title>
<id>1</id>
<children/>
</page>
</children>
</page>
<page>
<title>Parent Page2</title>
<id>2</id>
<children>
<page>
<title>Child Page2</title>
<id>3</id>
<children/>
</page>
</children>
</page>
</pages>
例PHP
$page = "Child Page2";
echo "The ID of " . $page . " is " . a($page);
function a ($title) {
$xml = simplexml_load_file("pages.xml") or die("Failed.");
return b ($xml[0], $title);
}
function b ($pages, $title) {
$val;
foreach ($pages as $page) {
if($page->title == $title) {
$val = $page->id;
break;
} else if ($page->children->children() > 0){
$val = b($page->children->children(), $title);
}
}
return $val;
}
正在輸出:The ID of Child Page2 is
現在我知道XML在這個例子中並不完美,但它只是一個pl aceholder讓你明白我想要做什麼。我使用的SimpleXML的XML如果以任何方式
解決方案
的問題是,如果返回的第一個分支b();
,但是仍然需要檢查孩子的其他分支,整個事情幫助返回null
或完全沒有。
我的解決方案低下來的作品,但去與斯韋茲的答案,因爲它是更短,更有效(保存保存變量)
請問您可以包括您的'$ pages'變量 –
有沒有抱歉,忘記從'$ pages'更改爲'$ xml' –
是否有任何理由使用XML字符串?你不能在一個字符串上「foreach」。另外,你不需要聲明$ val;在函數b的頂部。 –