所以我有一个XML文件,我试图按顺序循环,根据属性,"顺序".
这是一个例子:
<page>
<talentTrees>
<tree name="Football" order="2">
<tree name="Baseball" order="0">
<tree name="Frisbee" order="1">
</talentTrees>
</page>
Run Code Online (Sandbox Code Playgroud)
我的目标是使用foreach遍历每个"树",但我想按顺序属性的顺序阅读它们:棒球,飞盘,足球.(0,1,2).
抱歉英语不好,不是我的第一语言.
Jos*_*vis 15
为了将来参考,您可以使用以下方法通过XPath查询节点,并通过XPath对结果进行排序:SimpleDOM.在此示例中,我<tree/>按order属性的值对所有节点进行排序:
include 'SimpleDOM.php';
$page = simpledom_load_string('<page>
<talentTrees>
<tree name="Football" order="2"/>
<tree name="Baseball" order="0"/>
<tree name="Frisbee" order="1"/>
</talentTrees>
</page>');
$nodes = $page->sortedXPath('//tree', '@order');
foreach ($nodes as $node)
{
echo $node->asXML(), "\n";
}
Run Code Online (Sandbox Code Playgroud)
这应该给你你想要的:
$string = <<<EOS
<page>
<talentTrees>
<tree name="Football" order="2" />
<tree name="Baseball" order="0" />
<tree name="Frisbee" order="1" />
</talentTrees>
</page>
EOS;
$xml = simplexml_load_string($string);
$trees = $xml->xpath('/page/talentTrees/tree');
function sort_trees($t1, $t2) {
return strcmp($t1['order'], $t2['order']);
}
usort($trees, 'sort_trees');
var_dump($trees);
Run Code Online (Sandbox Code Playgroud)
$trees 现在按order属性排序.