XML для массива, а затем сортировать и отображать

У меня есть следующий 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
)
)

0

Решение

Если вы хотите сортировать по убыванию. вы могли бы использовать 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);
1

Другие решения

Это, вероятно, то, что вы ищете

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
)

)

)
1

после нескольких часов экспериментов я придумал это решение, которое дает желаемые результаты и позволяет мне соответствующим образом манипулировать результатами.

$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>";
}
0
По вопросам рекламы [email protected]