Jump to content

php array natural sort


DMG
 Share

Recommended Posts

Tātad ķeroš uzreizi pie lietas. Man ir nepieciešams sakārtot masīva elementus, lai aiz "1" nerādītos "10", bet "1A" un tamlīdzīgi. Zinu, ka php ir funkcija natsort, kas lieliski derētu, ja vien spētu ņemt vērā arī latviešu burtus. Pretējā gadījumā sanāk, ka pēc tādas sakārtošanas burts "Ģ" atrodas aiz burta "Z". Vai kādam ir nācies saskarties ar kaut ko līdzīgu un atrast sakarīgu risinājumu?

Link to comment
Share on other sites

Mezavecis

Pastāsti sīkāk, kas tev tas pa īpašo kārtošanas algoritmu.

 

 

lai aiz "1" nerādītos "10", bet "1A"

 

 

Ja vajag custom risinājumu, katram simbolam iedod vērtību un šķiro pēc tās. Vēl variants tekstu nokonvertēt atsevišķā kolonnā atmetot speciālos simbolus, ignorējot burtu lielumu un pēc tā kārtot, meklēt, kas gan vairāk gan piemērots meklēšanas optimizēšanai. 

 

Ja vajag gatavu risinājumu meklē tur, kur valodā ir speciālie simboli.

 

Piemēram,

http://stackoverflow.com/questions/2897924/sort-array-with-special-characters-in-php

Labots - Mežavecis
Link to comment
Share on other sites

Tur jau tā lieta, ka sakārtot masīvu pēc teksta nav problēma pat ar latviešu burtiem. Varu kaut vai ar sql panākt, lai to izdara pirms dabūju ārā masīvu. Bet tad atkal man nestrādā korekts sakārtojums cipariem. Man ir līdzīga situācija kā ir ar adresēm šeit: http://www.pasts.lv/lv/uzzinas/parbaudit-adresi/

Laukam "Māja" var būt gan māju nosaukumi, kurus būtu jāsakārto pēc alfabēta (var kaut vai ar sql). Bet tajā pat laikā laukam "Māja" var atnākt cipari jeb mājas nummuri nevis nosaukumi, kur būs jau 1, 2, 2A, 10 utt un te nu sql kārtošana neder, jo rezultātā iznāk masīvs ar 1, 10, 2, 2A (šeit der funkcija natsort, bet tad nederēs māju nosaukumiem). Un gan jau var sanak arī kad ir gan cipari, gan nosaukumi un tos jāsakārto korekti. Šeit tiešām vajag tādu universālāku gadījumu. Būtu lieliski, ja tai funkcijai natsort varētu iedot kodējumu, bet izskatās, ka to nevar izdarīt. Ceru tagad ir nedaudz skaidrāk, ko gribu panākt.

Link to comment
Share on other sites

Es teiktu, ka vajadzēs izmantot usort, un pašam uzrakstīt funkciju, kas spēj korekti salīdzināt divus nosaukumus. Šis uzdevums nebūt nav no vienkāršajiem, vajadzēs padomāt.

Link to comment
Share on other sites

Nu.. VZD šo jautājumu risināja jau datubāzē izveidojot speciālu lauku [sort_nos] kurā tad sākotnēji (adreses izveides laikā) tiek uzģenerēts sortēšanas nosaukums. (0002A=2A; 0003/0005=3/5; Viesturi 0001=Viesturi 1; 0001 k-0001=1 k-1; utt.)

Link to comment
Share on other sites

Russo paldies, tu devi man ideju, kā šo visu atrisināt. Atliek tikai pamēģināt, kas no tā sanāks :)

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...