Permalänk
Medlem

Alfabetisk gruppering i PHP

Hej!

Jag håller på att bygga en sida som listar upp orter i en loop via strängen ( $ort )
Arvika
Askersund
Avesta
Bengtsfors
Berg....

Undrade om det är möjligt att skapa listning ifrån själva strängen $ort så att första bokstaven ex. A grupperar visningen av alla orter som börjar på A sedan B osv. som nedan

A
Arvika
Askersund
Avesta

B
Bengtsfors
Berg....

eller är detta gjort via mysqli query?

Permalänk
Medlem

Använd foreach.
Ett exempel från när jag listar alla LP-skivor i en databas som börjar med A och skapar en länk.

echo "<details><summary>A<br></summary>"; foreach($album as $string) if($string[0] == 'A'){ echo "<a class='front' style='padding-left:16px;' href='album2.php?artist=".urlencode($string)."'>".$string."</a><br>"; } </details>

Missade "</details>"
Visa signatur

Asus C6H | R9-3900XT | 4x8GB G-Skill Ripjaws V 3600@3466 CL14 | Asus Radeon RX 580 8GB Strix Gaming OC | Asus Strix Raid DLX | Corsair Obsidian 750D AE

Permalänk
Medlem
Skrivet av Bibix:

Hej!

Jag håller på att bygga en sida som listar upp orter i en loop via strängen ( $ort )
Arvika
Askersund
Avesta
Bengtsfors
Berg....

Undrade om det är möjligt att skapa listning ifrån själva strängen $ort så att första bokstaven ex. A grupperar visningen av alla orter som börjar på A sedan B osv. som nedan

A
Arvika
Askersund
Avesta

B
Bengtsfors
Berg....

eller är detta gjort via mysqli query?

Loopa igenom din lista och spara första bokstaven i en array där nyckeln är första bokstaven och value är listan över orter under den nyckeln.

$orter = [ "Arvika", "Askersund", "Avesta", "Bengtsfors", "Berg" ]; $grouped_orter = array(); foreach($orter as $ort){ $grouped_orter[$ort[0]][] = $ort; }

Typ så Felhantering får du sköta själv, t.ex. om det är små/stora bokstäver, tomt namn m.m.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem

Tack J & P för tipset, skall försöka mecka ihop det och se om jag får rätt på det

Permalänk
Medlem

Om du vill se till att orterna är i bokstavs ordning så kan det vara värt att slänga in sort() före foreach loopen. Männskliga faktorn är inte att lita på.

$sortedArray = sort($ort, SORT_STRING); foreach($sortedArray as $sortedOrt){ // Din kod }

https://www.php.net/manual/en/function.sort.php

Visa signatur

Node 304 White | Asus Strix X470-I | R5 2600 @ 3.85Ghz | 16GiB DDR4-3000Mhz CL15 | Sapphire Radeon RX 5700 PULSE | 512GiB 860 EVO M.2 | 1TiB 970 EVO Plus NVMe | Corsair SF450

Permalänk
Medlem

Jag hade tråkigt, slängde ihop ett exempel: https://phpsandbox.io/e/x/jip45

Var tvungen att använda mb_substr istället för $ort[0] för att Ö skulle fungera, utf-8 grej antar jag.

(Disclaimer; Typ andra gången i mitt liv jag rör PHP)

Skrivet av Pamudas:

foreach($orter as $ort){ $grouped_orter[$ort[0]][] = $ort; }

Den varianten var smidigare