Se nedan...
sortering
23 svar · 505 visningar · startad av ironhead
Hur sorterar man en array mha namn i en speciell ordning?
(mySQL & PHP)
Om jag har en array som ser ut såhär:
array[0]="Papper"
array[1]="Kartong"
array[2]="Bil"
array[3]="Smörgås"
Hur kan jag göra för att den skall sorteras som:
Kartong Bil Papper Smörgås
Där namnen i arrayen kan vara olika värden varje gång eller olika långa.
Vill alltså att ett speciellt namn ska ligga på en speciell plats i arrayen
Om jag förstått dig rätt så vill du sortera din array, men vill samtidigt att ett visst värde ska ha en bestämd position.
Testa det här:
$array[0]="Papper";
$array[1]="Kartong";
$array[2]="Bil";
$array[3]="Smörgås";
function move_sort($array, $value, $position) {
if (($key = array_search($value, $array)) === false) {
sort($array);
return $array;
}
unset($array[$key]);
sort($array);
array_splice($array, $position, 0, $value);
return $array;
}
$array = move_sort($array, 'Kartong', 0);
öh! Snyggt...det funkade!
...men hur faan funkar det? Jag fattar nada!
Jag vill alltså att jag oavsett hur många värden i arrayen skall kunna säga att om "Papper" finns med ska den alltid ha position [0] och finns Smörgås med så skall den alltid ha position [3] osv.
Först skickar jag in arrayen, värdet jag försöker placera samt vilken position jag vill placera det i arrayen, till funktionen.
Finns inte värdet i arrayen så sorteras den bara och returneras.
Finns värdet så tar jag bort det, och sorterar den resterande arrayen.
Sedan sätter jag tillbaka värdet med array_splice, för att slutligen returnera arrayen.
array_splice är att man i en array i en viss position ersätter ett antal element med en array eller ett värde.
I det här fallet: sök upp position $position och ersätt 0 (noll) element med $value.
så om jag vill att Smörgås ska ha värdet [3] så kan jag skriva:
$array = move_sort($array, 'Smörgås', 3);
...eller?
ironhead skrev:
så om jag vill att Smörgås ska ha värdet [3] så kan jag skriva:
$array = move_sort($array, 'Smörgås', 3);
...eller?
Japp, men kom ihåg att första positionen är 0 (noll), så detta skulle lägga Smörgås sist.
Du kan också lägga in positionen med negativa värden.
$array = move_sort($array, 'Smörgås', -1);
skulle sätta Smörgås näst sist.
om jag nu har en loop som ser ut ungefär såhär:
while($array = mysql_fetch_array($result))
{
If ($paket==$array["paket"])
{
}else{
echo $array["paket"];
}
echo $array["Innnehall"];
$paket= $array["paket"];
}
datat som kommer ser ut såhär:
paket1 borste
paket1 kam
paket1 tandborste
paket1 rep
paket2 kalsong
paket2 tandpetare
paket2 tändare
paket 3 lampa
paket3 pizza
paket3 ägg
paket3 glass
paket3 briketter
paket3 lammstek
Hur gör jag då om jag vill ha en speciell sortering på innnehållen i paketen? Jag vill alltså kunna sätta ordningen på allt innehåll i paketen...
får det inte att funka :(
Vad är det du ska ha det sorterat efter?
Jag vill kunna sortera efter alla saker...om det tex. finns 10 st innehållssaker, så vill jag att om det finns ett rep i kartongen så ska det hamna först..finns det inget rep, så ska tex: sax hamna först.....sen vill jag om det finns lägga badhanduk efter den..osv osv.
Förstår du vad jag e ute efter...låter bara snurrigt när jag försöker förklara....måste vara värmen ;)
Det där är jag ytterst tveksam om jag förstod.
Vill du först kunna välja/söka på några saker, och om de finns i arrayen ska de komma först, övriga saker i bokstavsordning ?
Ska det sorteras inom paketen, eller blir alltihop i en "påse" ?
Vi säger såhär: Jag har 10 fasta saker i "innehållet" som jag vill sortera.....inte i bokstavsordning utan i den ordning jag vill...inte id inte i bokstavsordning utan bara i den ordning jag bestämmer....så hittar jag en sak i innehåll som heter "sax" så vill jag att den ska ha position 4 i arrayen
Jag vill alltså sätta fasta platser på valda ord.
ironhead skrev:
Vi säger såhär: Jag har 10 fasta saker i "innehållet" som jag vill sortera.....inte i bokstavsordning utan i den ordning jag vill...inte id inte i bokstavsordning utan bara i den ordning jag bestämmer....så hittar jag en sak i innehåll som heter "sax" så vill jag att den ska ha position 4 i arrayen
Jag vill alltså sätta fasta platser på valda ord.
Får man fråga? Till vad skall detta användas? :q
hehehe....struligt värre....jag vill bara ha en massa paket med en massa innehåll som jag kan bestämma ordningsföljden på..
jag vill alltså att det ska se ut såhär tex:
PAKET1
Sax Banjo Godis Tupp Gitarr Jeans
PAKET2
Sax Godis Tupp Jeans
Paket1 innehåller 6 saker paket2 4 ändå så följer det ett mönster...det ordningsmönster som jag vill sortera efter...
Allt jag kan se är att Sax, Godis, Tupp och Jeans kommer i samma ordning i de bägge paketen, men något mönster kan jag inte se.
Du får annars bestämma ordningen manuellt. Ta en titt i den här tråden om det kan ge dig några idéer: http://www.webforum.nu/showthread.php?s=&threadid=79574
vad jag menade var att om inte tex Banjo & Gitarr finns med så fylls de andra namnen på ett steg åt vänster.
Men efter vilka utgångspunkter?
Vill du att dom som finns i paket 1 men INTE i paket 2 ska sättas först i paket 1?
Ska paket 2 sorteras på motsvarande vis ?
Ska de andra i paket 1 sorteras i samma ordning som paket 2, eller tvärtom?
Hur kommer paket 3 in i det hela ?
Kan det finnas fler paket än 1,2 och 3 ?
Vill du att dom som finns i paket 1 men INTE i paket 2 ska sättas först i paket 1?
Näe, bara enligt den ord-ordningen
Ska paket 2 sorteras på motsvarande vis ?
Ja, precis som paket 1, 2 , 3, 4 osv..samma ord-följd
Ska de andra i paket 1 sorteras i samma ordning som paket 2, eller tvärtom?
Alla ska sorteras efter samma ordföljd
Hur kommer paket 3 in i det hela ?
Kan det finnas fler paket än 1,2 och 3 ?
Det kan finnas hur många paket som helst...och kan innehålla max 10 saker var.
Förstår fortfarande inte.
Vill du kunna bestämma att om några valda värden (t.ex Sax Godis Tupp Jeans ) finns i paketet ska de läggas i just den ordningen?
Har det någon betydelse om de ligger först eller sist bland värdena i de olika paketen?