我有以下xml文件(示例)
<xml>
<product>
<url>banners</url>
<name>Banners</name>
</product>
<product>
<url>billboards</url>
<name>Billboards</name>
</product>
<product>
<url>brochures</url>
<name>Brochures</name>
</product>
<product>
<url>business-cards</url>
<name>Business Cards</name>
</product>
</xml>
我想写一个PHP脚本,在解析xml文件时(它会不时更改,不会手动排序),按标签的字母顺序对值进行排序,但我发现的将xml文件转换为数组的代码也在数组中放入了很多无用的信息,几乎不可能对我想要显示的信息进行排序和显示。这是我目前为止的php代码
<?php
$file = file_get_contents("xml/products.xml");
$p = xml_parser_create();
xml_parse_into_struct($p, $file, $vals, $index);
xml_parser_free($p);
asort($vals['value']);
echo "<H1>Vals array</H1><BR>";
print_r($vals);
?>
有没有另一种方法可以在没有所有不必要信息的情况下转换我的xml文件,并且可以轻松地在词尾显示信息??
我希望最终得到的阵列将看起来像
Array
(
[product] => Array
(
[url] => window-clings
[name] => Window Clings
)
[product] => Array
(
[url] => banners
[name] => Banners
)
)
如果您想按降序排序。在这种情况下,您可以使用usort()
。示例:
$xml = simplexml_load_file('xml/products.xml');
$data = json_decode(json_encode($xml), true);
usort($data['product'], function($a, $b){
return strcmp($b['name'], $a['name']);
});
$final = array_map(function($batch){
return array('product' => $batch);
}, $data['product']);
echo '<pre>';
print_r($final);
这可能就是您寻找的原因
function cmp($a, $b)
{
return strcmp($a["name"], $b["name"]); // sort by name field
}
$xml = simplexml_load_string($xmlString, null, LIBXML_NOCDATA);
if($xml == false){
// Handle error
}
$json = json_encode($xml);
$array = json_decode($json, TRUE);
usort($array['product'], "cmp");
print_r($array);
// Iterate over your array
foreach ($array['product'] as $key => $value) {
echo $value['name']. ' : '. $value['url'];
}
你的阵列看起来像这个
Array
(
[product] => Array
(
[0] => Array
(
[url] => banners
[name] => Banners
)
[1] => Array
(
[url] => billboards
[name] => Billboards
)
[2] => Array
(
[url] => brochures
[name] => Brochures
)
[3] => Array
(
[url] => business-cards
[name] => Business Cards
)
)
)
经过几个小时的实验,我想出了这个解决方案,它给出了我想要的结果,并允许我相应地操纵结果
$file = simplexml_load_file("xml/products.xml");
foreach($file->product as $product)
{
$products["$product->name"] = "$product->url";
}
asort($products);
foreach($products as $name => $url)
{
echo" <A HREF='"products/$url.php'">$name</A>";
}