Php 如何对多维XML文件进行排序?
我曾试图让一个XML文件进行排序,但没有成功。一天半之后,我需要一位专家的帮助。谢谢 我的XML文件(示例缩短):Php 如何对多维XML文件进行排序?,php,xml,sorting,multidimensional-array,Php,Xml,Sorting,Multidimensional Array,我曾试图让一个XML文件进行排序,但没有成功。一天半之后,我需要一位专家的帮助。谢谢 我的XML文件(示例缩短): 2010-06-01 暑期截止申请表 2010-07-01 到期日申请表 2010-07-31 夏季账单到期 我的PHP: <?php $xml = simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/feeds/deadlines.xml'); // start THIS WORKS echo'<pre>';
2010-06-01
暑期截止申请表
2010-07-01
到期日申请表
2010-07-31
夏季账单到期
我的PHP:
<?php
$xml = simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/feeds/deadlines.xml');
// start THIS WORKS
echo'<pre>';
foreach($xml as $deadline) echo <<<EOF
Date: {$deadline->date}
Text: {$deadline->text}
EOF;
echo'</pre>';
// end THIS WORKS
?>
是否有人有一个简单的PHP解决方案来在echo to屏幕之前的“日期”对XML文件进行排序
谢谢好的,很抱歉我之前在房子里转了转-为了清楚起见,我添加了一个不同的答案,但是使用了我链接到的排序代理技术
函数xsort(&$nodes,$child\u name,$order=SORT\u ASC)
{
$sort_proxy=array();
foreach($k=>$node的节点){
$sort\u proxy[$k]=(字符串)$node->$child\u name;
}
数组\u多排序($sort\u proxy,$order,$nodes);
}
$structure=
2010-06-01
暑期截止申请表
2010-07-01
到期日申请表
2010-07-31
夏季账单到期
';
$xml=simplexml\u load\u string($structure);
$nodes=$xml->xpath('/deadline/deadline');
//按日期排序,降序
xsort($nodes,'date',SORT_DESC);
变量转储($节点);
好的,对不起,我之前在房子里转了转——为了清楚起见,我添加了一个不同的答案,但使用了我链接到的排序代理技术
函数xsort(&$nodes,$child\u name,$order=SORT\u ASC)
{
$sort_proxy=array();
foreach($k=>$node的节点){
$sort\u proxy[$k]=(字符串)$node->$child\u name;
}
数组\u多排序($sort\u proxy,$order,$nodes);
}
$structure=
2010-06-01
暑期截止申请表
2010-07-01
到期日申请表
2010-07-31
夏季账单到期
';
$xml=simplexml\u load\u string($structure);
$nodes=$xml->xpath('/deadline/deadline');
//按日期排序,降序
xsort($nodes,'date',SORT_DESC);
变量转储($节点);
可能重复[Sorting a array of SimpleXML Object](),谢谢Gordon,但这不是重复。我在“对SimpleXML对象数组进行排序”时测试了代码,但没有一个有效。那里的解决方案在通过simplexml_load_file()处理时不处理XML。如果有人尝试对XML文件进行排序,仍在寻找解决方案。持续4天:(谢谢。可能重复[Sorting a array of SimpleXML Object]()谢谢Gordon,但它不是重复的。我在“Sorting a array of SimpleXML Object”测试了代码,但没有一个有效。那里的解决方案在通过SimpleXML\u load\u file()处理时不会处理XML。如果有人尝试对XML文件进行排序,则仍在寻找解决方案。持续4天:(谢谢。您不能使用xpath吗?$XML->xpath('/deadline/deadline/date'))
Robin,这只会给你一个日期数组,而不是OP所关注的已排序的截止日期节点。Nev…刚从午餐回来,复制并粘贴了你的代码,然后逐字运行。它很有效。(但你已经知道:)因此,我想我可以将它向前移动并从这里进行调整——即,我需要能够读入XML。我看到您将它的硬代码分配给$var。我将处理它并很快发回。希望我可以在这个坏男孩身上单击绿色的回答按钮。你真是太棒了!!“$nodes=$XML->xpath('/deadline/deadline');”是缺少的链接。谢谢你的帮助。@Nev因为->xpath
返回一个数组,而不是一个对象,所以不需要使用代理,您只需使用带有适当回调的usort
。或者我缺少了什么吗?您不能用xpath执行此操作吗?$xml->xpath(“/deadline/deadline/date”)
Robin,这只会给你一个日期数组,而不是OP所关注的已排序的截止日期节点。Nev…刚从午餐回来,复制并粘贴了你的代码,然后逐字运行。它很有效。(但你已经知道:)因此,我想我可以将它向前移动并从这里进行调整——即,我需要能够读入XML。我看到您将它的硬代码分配给$var。我将处理它并很快发回。希望我可以在这个坏男孩身上单击绿色的回答按钮。你真是太棒了!!“$nodes=$XML->xpath('/deadline/deadline');”是缺少的链接。感谢您的帮助。@Nev因为->xpath
返回一个数组,而不是一个对象,所以不需要使用代理,您只需使用带有适当回调的usort
。或者我缺少什么?
<?php
$xml = simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/feeds/deadlines.xml');
// start THIS WORKS
echo'<pre>';
foreach($xml as $deadline) echo <<<EOF
Date: {$deadline->date}
Text: {$deadline->text}
EOF;
echo'</pre>';
// end THIS WORKS
?>
function xsort(&$nodes, $child_name, $order=SORT_ASC)
{
$sort_proxy = array();
foreach ($nodes as $k => $node) {
$sort_proxy[$k] = (string) $node->$child_name;
}
array_multisort($sort_proxy, $order, $nodes);
}
$structure = '<?xml version="1.0" encoding="utf-8" ?>
<deadlines>
<deadline>
<date>2010-06-01</date>
<text>Application for Summer Due</text>
</deadline>
<deadline>
<date>2010-07-01</date>
<text>Application for Fall Due</text>
</deadline>
<deadline>
<date>2010-07-31</date>
<text>Summer Bill Due</text>
</deadline>
</deadlines>';
$xml = simplexml_load_string($structure);
$nodes = $xml->xpath('/deadlines/deadline');
// Sort by date, descending
xsort($nodes, 'date', SORT_DESC);
var_dump($nodes);