我有一个我无法控制的外部XML文件,就是这样:
<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="001" Name="001">
<Images>
<ImageGalleryEntry Name="1 John" Description="Doe" FileName="830358.1john.png" Width="100" Height="100">
<S3Key>accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms-assets/images/830358.logooraclehealthsciencesthumb.png</S3Key>
<S3ThumbnailKey>accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms-assets/thumbnails/830358.logooraclehealthsciencesthumb.png</S3ThumbnailKey>
<ContentLength>1309</ContentLength>
</ImageGalleryEntry>
<ImageGalleryEntry Name="11 Jane" Description="Doet" FileName="943702.11jane.png" Width="100" Height="100">
<S3Key>accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms-assets/images/943702.logorochethumb.png</S3Key>
<S3ThumbnailKey>accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms-assets/thumbnails/943702.logorochethumb.png</S3ThumbnailKey>
<ContentLength>1403</ContentLength>
</ImageGalleryEntry>
<ImageGalleryEntry Name="10 Jack" Description="Smith" FileName="965501.10jack.png" Width="100" Height="100">
<S3Key>accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms-assets/images/965501.pwclogo.png</S3Key>
<S3ThumbnailKey>accounts/b2d174c1-a408-4d58-9d48-1490ac4e9f9b/site-37857/cms-assets/thumbnails/965501.pwclogo.png</S3ThumbnailKey>
<ContentLength>7021</ContentLength>
</ImageGalleryEntry>
</Images>
</Gallery>
我还有一个PHP代码,它可以获取这些信息并将其以html格式输出:
<?php
$url = '001.XML';
$xml = simplexml_load_file($url);
foreach($xml->Images->ImageGalleryEntry as $item) {
echo $item['FileName'] . "<br/>" . $item['Name'] . "<br/>" . $item['Description'] . "<br/><br/>";
};
?>
830358.1john.png
约翰一 母鹿
943702.11jane.png
11简
Doet
965501.10jack.png
10杰克
史密斯
问题是我实际上需要按Name属性排序,如下所示:
830358.1john.png
约翰一 母鹿
965501.10jack.png
10杰克
史密斯
943702.11jane.png
11简
Doet
请注意,XML会不断更改,因此php应按名称按字母顺序自动排序。我猜我需要以某种方式按字母顺序对所有ImageGalleryEntry标签按名称属性进行排序,然后再输入每个循环,但不知道如何做到这一点。
请提供一个实际的方法,我是php的新手,如果你说“制作一个阵列”之类的话就不知道该怎么做。
答案 0 :(得分:4)
您需要使用usort。这应该有效:
<?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/>";
}