сортировать массив с помощью array_unique из внешнего XML (CDATA)

Мне не удается отсортировать массив по алфавиту.
Это массив с городами, которые я получаю из внешнего XML.

XML выглядит так, и это узел localidad Я пытаюсь сортировать.

<parada>
<id>506</id>
<localidad>
<![CDATA[ Alvor ]]>
</localidad>
<parada>
<![CDATA[ Alvor Baia Hotel (Bus Stop Alvor Férias) ]]>
</parada>
<lat>37.1296</lat>
<lng>-8.58058</lng>
<horasalida>05:40</horasalida>
</parada>

Соответствующий код:

$xml = new SimpleXMLElement($viajes);
foreach ($xml->parada as $excursion) {
$newParadasarray[] = $excursion->localidad;
}
$newParadasarray = array_unique($newParadasarray);

foreach ($newParadasarray as $parada) {

if (strpos($parada, 'Almuñecar') !== false)
echo '<option value="Almuñecar">Almuñecar</option>';

if (strpos($parada, 'Benalmádena') !== false)
echo '<option value="Benalmádena Costa">Benalmádena Costa</option>';

if (strpos($parada, 'Estepona') !== false)
echo '<option value="Estepona">Estepona</option>';
etc.
}

Я пробовал с sort() а также array_values(),

Это вывод print_r($newParadasarray):

Array (
[0]  => SimpleXMLElement Object ( [0] => SimpleXMLElement Object ( ) )
[1]  => SimpleXMLElement Object ( [0] => SimpleXMLElement Object ( ) )
[2]  => SimpleXMLElement Object ( [0] => SimpleXMLElement Object ( ) )
[4]  => SimpleXMLElement Object ( [0] => SimpleXMLElement Object ( ) )
[9]  => SimpleXMLElement Object ( [0] => SimpleXMLElement Object ( ) )
[14] => SimpleXMLElement Object ( [0] => SimpleXMLElement Object ( ) )
[20] => etc.

0

Решение

Если вы знакомы с DOMDocument, вы можете просто сделать это:

$doc = new DOMDocument();
$doc->loadXML($xml);
$array = array();

foreach($doc->getElementsByTagName("localidad") as $localidad) {
$array[] = trim($localidad->nodeValue);
}

$array = array_unique($array);
sort($array);
1

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

Проблема в том, что вы присваиваете SimpleXMLElement в массив, вместо этого вы хотите содержимое элемента, поэтому просто измените строку …

$newParadasarray[] = $excursion->localidad;

в

$newParadasarray[] = trim((string)$excursion->localidad);

В ролях (string) принимает текстовое содержимое и trim() удаляет лишние пробелы вокруг него.

Я предполагаю, что у вас есть несколько <parada> элементы, так что $xml->parada возвращает правильные данные.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector