Permalänk
Medlem

PHP - sortering

Jag har fått ett litet php script av en vän, som jag nu modifierat lite, men jag skulle vilja få scriptet att göra en omvänd sortering, nu går den på filnamnen, men jag vill ha sorteringen bakvänd 9 före 1 osv...

sidan som det finns på: http://sphr.mine.nu/?go=desktop

<? $handle=opendir('pics/desktop/thumb/'); while (false !== ($file = readdir($handle))) { if (($file != ".") && ($file != "..")) { $files[] = $file; } } closedir($handle); $j = -1; $i = 0; usort($files,'strcasecmp'); reset($files); echo "<br><table width='100%' border='0' cellspacing='0' cellpadding='0'>"; while ($files[$i] != "") { $j++; if ($j == 4) { $j = 0; echo "<tr align='center'>"; echo "</tr>"; } $name = substr($files[$i],0,strlen($files[$i])-4); echo "<td width='25%' valign='top' align='center'><a href='pic.php?type=dt&pic=$name'><img src='pics/desktop/thumb/$files[$i]' width='80' height='60' alt='$name.jpg'><br>$name</a><br><br></td>\n"; $i++; } echo "</table>"; ?>

Visa signatur

(\_/)
(='.') • warpdrive - svenska citatdatabasen
(")-(")

Permalänk
Hedersmedlem

Problemet är att han använder PHP's implementation av quicksort. På raden

usort( $files, 'strcasecmp' );

anropar han PHP's sorteringsrutin med namnet på den funktion han vill använda för att jämföra två strängar med varandra. Det du måste göra om du vill "vända på steken" är att antingen skriva en egen variant av strcasecmp() som returnerar motsatta värden gentemot "originalet" eller skriva en helt egen sorteringsrutin (inte så jobbigt som det låter).

Om prestanda inte är allt för viktigt skulle du också kunna köra array_reverse() på $files efter reset(). Denna funktion reverserar helt enkelt alla element i en array vilket skulle lösa ditt problem. Ingen vacker lösning direkt, men det funkar.

Permalänk
Medlem

Hur pass vacker lösningen blir, eller prestandamässig bryr jag mig inte om, det räcker med att det utför vad jag vill ha gjort.

Dock lyckas jag inte med att smälla in array reverse om det är : array_reverse($files);
du menar att jag ska lägga in under reset raden.
* edit: prövade också att lägga array_reverse inuti reset, men inte heller det ville fungera.

Visa signatur

(\_/)
(='.') • warpdrive - svenska citatdatabasen
(")-(")

Permalänk
Medlem

Så här skulle man nog kunna skriva en sorteringsfunktionen:

function sortering($a,$b)
{
return -1*strcasecmp($a,$b);
}

och sen:

usort($files,'sortering');

Men det kanske inte var en så snygg lösning det heller

Visa signatur

//cykze

Permalänk
Medlem

sphr: $files = array_reverse($files) fungerar väl?

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
sphr: $files = array_reverse($files) fungerar väl?

TACK!
Det fungerade, men jag var inte smart nog att skriva dit $files = på raden

Visa signatur

(\_/)
(='.') • warpdrive - svenska citatdatabasen
(")-(")

Permalänk
Medlem

Misstänkte nästan det

Visa signatur

//cykze