I can't manage to sort an array alfabetically. It's an array with cities that I get from an external XML.
The XML looks like this, and it's the node localidad
I am trying to sort.
<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>
The relevant code:
$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.
}
I have tried with sort()
and array_values()
.
This is the output of 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.
The problem is that your assigning a SimpleXMLElement into the array, instead you want the content of the element, so just change the line...
$newParadasarray[] = $excursion->localidad;
to
$newParadasarray[] = trim((string)$excursion->localidad);
The cast (string)
takes the text content and trim()
removes the extra whitespace around it.
I am assuming that you have multiple <parada>
elements, so that $xml->parada
is returning the correct data.
If you're familiar with DOMDocument you could simply do this:
$doc = new DOMDocument();
$doc->loadXML($xml);
$array = array();
foreach($doc->getElementsByTagName("localidad") as $localidad) {
$array[] = trim($localidad->nodeValue);
}
$array = array_unique($array);
sort($array);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.