[PHP] Hämta ut och sortera värden ur XML

Permalänk
Medlem

[PHP] Hämta ut och sortera värden ur XML

Hej, skulle någon vilja hjälpa mig med en kodsnutt i PHP. Hämtar en XML och listar den på en HTML sida, https://www.buffalopartners.com/xml/winnersfeed.asp .

Jag behöver hjälp att sortera resultatet i en array efter Amount värdet, sen presentera endast de 10 största i en lista.
Här är min kod just nu som fungerar, men då utan sortering och begränsning.

<?php $url="https://www.buffalopartners.com/xml/winnersfeed.asp"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); // get the url contents $data = curl_exec($ch); // execute curl request curl_close($ch); $xml = simplexml_load_string($data); echo "<br /><br />"; $arr = array($xml); echo "<table class='winnersTable'><thead><tr>"; echo "<th><b>Game</b></th>"; echo "<th><b>Jackpot</b></th>"; echo "<th><b></b></th>"; echo "</tr></thead><tbody>"; foreach($xml->Win as $key=>$value) { $game = (strpos($value[Game], ',') === false) ? $value[Game] : strstr($value[Game], ',', true); $currency = (strpos($value[Amount], '.') === false) ? $value[Amount] : strstr($value[Amount], '.', true); echo '<tr><td> '.$game.'</td>'.'<td>'.$value[CurrencySymbol].' '.$currency.'</td>'. '<td><a class="winnersButton" href="http://www.spinpalace.com/?s=bfp36323&a=bfpadid53723&mid=1422..." target="_blank">Play</a></td>' .'</tr>'; } echo ("</tbody></table>"); ?>

Ni får gärna föreslå förbättringar

Visa signatur

Intel Core i9 9900K 3.6GHz, 16MB | ASUS ROG STRIX Z390-F GAMING | MSI GeForce RTX 2070 SUPER 8GB VENTUS OC | Corsair 32GB (2x16GB) DDR4 3200MHz CL16 | Samsung 970 EVO Plus 500GB | Fractal Design Define R6 USB-C Vit | EVGA SuperNOVA G1+ 750W | Noctua NH-D15 | Asus 24" LED VG248QE

Permalänk
Medlem

I PHPs dokumentation finns det en lista med alla sorteringsfunktioner: http://php.net/manual/en/array.sorting.php.

Exempelvis finns `usort` som låter dig skicka med en funktion som jämför elementen, vilket är bra om du har någon form av nästlad datastruktur (exempelvis kanske du vill sortera på ett visst fält).
http://php.net/manual/en/function.usort.php

För att sedan få ut de tio första elementen i en array kan du använda `array_slice`.
Exempelvis såhär:

$slicedArr = array_slice($arr, 0, 10);

http://php.net/manual/en/function.array-slice.php

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem
Skrivet av ToJa92:

I PHPs dokumentation finns det en lista med alla sorteringsfunktioner: http://php.net/manual/en/array.sorting.php.

Exempelvis finns `usort` som låter dig skicka med en funktion som jämför elementen, vilket är bra om du har någon form av nästlad datastruktur (exempelvis kanske du vill sortera på ett visst fält).
http://php.net/manual/en/function.usort.php

För att sedan få ut de tio första elementen i en array kan du använda `array_slice`.
Exempelvis såhär:

$slicedArr = array_slice($arr, 0, 10);

http://php.net/manual/en/function.array-slice.php

Tack, jag hittade den också. Men får det inte att fungera

Visa signatur

Intel Core i9 9900K 3.6GHz, 16MB | ASUS ROG STRIX Z390-F GAMING | MSI GeForce RTX 2070 SUPER 8GB VENTUS OC | Corsair 32GB (2x16GB) DDR4 3200MHz CL16 | Samsung 970 EVO Plus 500GB | Fractal Design Define R6 USB-C Vit | EVGA SuperNOVA G1+ 750W | Noctua NH-D15 | Asus 24" LED VG248QE

Permalänk
Medlem
Skrivet av Seimawn:

Tack, jag hittade den också. Men får det inte att fungera

Snabbhack.

<?php $data = file_get_contents("data.xml"); // Så vi inte hammrar servern när vi testar. $xml = simplexml_load_string($data); $arr = array(); foreach($xml->Win as $key=>$value) { $tmp = array(); $tmp['amount'] = (Float)$value[Amount]; $tmp['game'] = (String)$value[Game]; $arr[] = $tmp; } usort($arr, "cmp"); $new = array_slice($arr, 0, 10); print_r($new); function cmp($b, $a) { return strcmp($a["amount"], $b["amount"]); } ?>