Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何对多维XML文件进行排序?_Php_Xml_Sorting_Multidimensional Array - Fatal编程技术网

Php 如何对多维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>';

我曾试图让一个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>';
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);