PHP:如何按属性按字母顺序对XML进行排序;对于每一个“;环 设置:

PHP:如何按属性按字母顺序对XML进行排序;对于每一个“;环 设置:,php,xml,xml-parsing,Php,Xml,Xml Parsing,我有一个无法控制的外部XML文件,如下所示: 001.xml accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms assets/images/830358.logooraclehealthsciencesthumb.png accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms assets/thumbnails/830358.logooraclehealth

我有一个无法控制的外部XML文件,如下所示:

001.xml

accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms assets/images/830358.logooraclehealthsciencesthumb.png
accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms assets/thumbnails/830358.logooraclehealthsciencesthumb.png
1309
accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms assets/images/943702.logolochethumb.png
accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms资产/缩略图/943702.logolochethumb.png
1403
accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms assets/images/965501.pwclogo.png
accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms assets/thumbnails/965501.pwclogo.png
7021
我还有一个php代码,它可以获取这些信息并以html格式很好地显示出来:

index.php片段
Images->ImageGalleryEntry作为$item){
echo$item['FileName']。“
。”$item['Name']。“
。”$item['Description']。“

”; }; ?>
输出为: 830358.1john.png
1约翰
能源部

943702.11jane.png
11简
没有

965501.10jack.png
10杰克
史密斯

问题是我实际上需要按Name属性对其进行排序,如下所示:

830358.1john.png
1约翰
能源部

965501.10jack.png
10杰克
史密斯

943702.11jane.png
11简
没有

注意,XML不断变化,因此php应该自动按名称的字母顺序排列。我猜在输入for each循环之前,我需要按照名称属性对所有ImageGalleryEntry标记按字母顺序进行排序,但不知道如何进行排序

请提供一个实际的方法,我是php新手,如果你说“生成数组”之类的话,我不知道该怎么做。你需要使用。这应该起作用:

<?php
$url = '001.XML';
$xml = simplexml_load_file($url);

$items = array();
foreach($xml->Images->ImageGalleryEntry as $item) {
    $items[] = $item;
};

// Custom sort on the names of the items:
usort ($items, function($a, $b) {
    return strcmp($a['Name'], $b['Name']);
});

foreach ($items as $item) {
    echo $item['FileName'] . "<br/>" . $item['Name'] . "<br/>" . $item['Description'] . "<br/><br/>";
}
Images->ImageGalleryEntry作为$item){
$items[]=$item;
};
//项目名称的自定义排序:
usort($items,function($a,$b){
返回strcmp($a['Name'],$b['Name']);
});
foreach($items作为$item){
echo$item['FileName']。“
。”$item['Name']。“
。”$item['Description']。“

”; }
您需要使用。这应该起作用:

<?php
$url = '001.XML';
$xml = simplexml_load_file($url);

$items = array();
foreach($xml->Images->ImageGalleryEntry as $item) {
    $items[] = $item;
};

// Custom sort on the names of the items:
usort ($items, function($a, $b) {
    return strcmp($a['Name'], $b['Name']);
});

foreach ($items as $item) {
    echo $item['FileName'] . "<br/>" . $item['Name'] . "<br/>" . $item['Description'] . "<br/><br/>";
}
Images->ImageGalleryEntry作为$item){
$items[]=$item;
};
//项目名称的自定义排序:
usort($items,function($a,$b){
返回strcmp($a['Name'],$b['Name']);
});
foreach($items作为$item){
echo$item['FileName']。“
。”$item['Name']。“
。”$item['Description']。“

”; }
当心永远不要写答案当你累的时候,我正要睡觉,然后意识到我的答案有根本性的缺陷,所以重新启动我的笔记本电脑来删除它。很抱歉,在建议使用排序功能时,我没有考虑到它们是对象这一事实。当心,当你累了的时候,千万不要写答案,我正要睡觉,然后意识到我的答案有根本性的缺陷,所以重新启动我的笔记本电脑来删除它。很抱歉,在建议使用排序函数时,我没有考虑到它们是对象这一事实。完美的答案,简单,使用相同的基本原则。你太棒了!出于某种原因,当我使用它时,$items变成了一个simplexml对象数组,然后,usort就不起作用了。我想我必须从$a['Name']改为$a->Name,然后在foreach上做同样的操作,然后它就成功了。完美的答案,简单,使用相同的基本原则。你太棒了!出于某种原因,当我使用它时,$items变成了一个simplexml对象数组,然后,usort就不起作用了。我想我必须把$a['Name']改成$a->Name,然后在foreach上做同样的事情,然后它就开始工作了。
<?php
$url = '001.XML';
$xml = simplexml_load_file($url);

$items = array();
foreach($xml->Images->ImageGalleryEntry as $item) {
    $items[] = $item;
};

// Custom sort on the names of the items:
usort ($items, function($a, $b) {
    return strcmp($a['Name'], $b['Name']);
});

foreach ($items as $item) {
    echo $item['FileName'] . "<br/>" . $item['Name'] . "<br/>" . $item['Description'] . "<br/><br/>";
}