Autor Zpráva
TrueFriend
Profil
ahoj. chtěl bych se zeptat, jak mám přepracovat tento script, aby mi řadil vypisované soubory ze složky dotazniky podle data vytvoření souboru v té složce?
Mělo by to jít, ale nefunguje to.nevím proč.


$dir = opendir('dotazniky');
$soubory = array();
while (($soubor = readdir($dir)) !== false) {
if ($soubor!='.' and $soubor!='..') $soubory[] = $soubor;
}
closedir($dir);

$soubory = array_reverse($soubory);
foreach($soubory as $soubor) {
$jmeno = preg_replace('/^(.*).php.?$/', '\1', $soubor);
$datum_vytvoreni = StrFTime("%d.%m.%Y - %H:%M:%S", filectime("dotazniky/$soubor"));
echo "<tr><td align=right>$datum_vytvoreni&nbsp;</td><td width=70%>&nbsp;<strong><a href=\"dotazniky/$soubor\">$jmeno</a></strong></td></tr>\n";
}
DJ Miky
Profil
TrueFriend
Asi si ty všechny soubory z té složky načti do pole s jejich časy, nějak to pole seřaď a pak pomocí foreach to vypsat...
TrueFriend
Profil
tak jsem to zkusil, ale nefunguje mi to. skončil jsem nakonec u toho původního scriptu, protože mi to nechtělo fungovat.
gaminn
Profil *

function mb_strcoll($string1, $string2) {
return strcoll(iconv(mb_detect_encoding($string1), 'WINDOWS-1250//TRANSLIT', $string1), iconv(mb_detect_encoding($string2), 'WINDOWS-1250//TRANSLIT', $string2));
}

function sortTwoDimArray(&$data, $column) {
$function_data = 'return mb_strcoll($a[\'' . $column . '\'], $b[\'' . $column . '\']);';

return uasort($data, create_function('$a, $b', $function_data));
}


$dir = opendir('dotazniky');
$soubory = array();
while (($soubor = readdir($dir)) !== false) {
if ($soubor!='.' and $soubor!='..') $soubory[] = array('name' => $soubor, 'time' => filectime("dotazniky/$soubor"));
}
closedir($dir);

sortTwoDimArray(&$soubory, 'time');



Pro tvé účely můžeš vynechat funkci mb_strcoll (řadíš jen podle číselných dat, pokud bys ale řadil něco s diakritikou, je tam tahle funkce zapotřebí)...
TrueFriend
Profil
díky, ale hází to chybu:

Warning: filectime() [function.filectime]: stat failed for dotazniky/Array in:
$datum_vytvoreni = StrFTime("%d.%m.%Y - %H:%M:%S", filectime("dotazniky/$soubor"));
gaminn
Profil *
No jasně, počítal jsem s tím, že si náležitě poupravíš zbytek kódu - pole $soubory není jednorozměrné, jak jsi ho měl před tím, ale dvourozměrné.
TrueFriend
Profil
dvourozměrné?
gaminn
Profil *
Ano. jednorozměrné:
$array[0] = 'a';
$array[1] = 'b';
......................

dvourozměrné:

$array[0]['name'] = 'a';
$array[0]['time'] = '1';
.............................
$array[1]['name'] = 'b';
$array[1]['time'] = '2';
.............................
TrueFriend
Profil
nejsem profík, takže rozměrům moc nerozumím. omlouvám se.
gaminn
Profil *
Však není problém to vysvětlit, od toho tu fórum je. Btw, já profík taky nejsem.
TrueFriend
Profil
gaminn
když víš jak ten řádek přepracovat, tak proč ho nenapíšeš?Napsal by jsi ho prosím?já se s tím pořád patlám a bez výsledně :(
gaminn
Profil *
Můžeš mi, prosím, říct, jaké patlání máš s úpravami toho kódu? Při průměrné inteligenci to nemůže trvat dýl, než dvacet sekund (mně, jelikož jsem ten kód upravoval k obrazu svému, to trvalo minutu)... Stačilo přeci jen přidat ke každé proměnné $soubor v cyklu foreach přidat ['name'], při troše větší nápaditosti nahradit zjišťování času pomocí funkce filectime za $soubor['time'].



function mb_strcoll($string1, $string2) {
return strcoll(iconv(mb_detect_encoding($string1), 'WINDOWS-1250//TRANSLIT', $string1), iconv(mb_detect_encoding($string2), 'WINDOWS-1250//TRANSLIT', $string2));
}

function sortTwoDimArray(&$data, $column) {
$function_data = 'return mb_strcoll($a[\'' . $column . '\'], $b[\'' . $column . '\']);';

return uasort($data, create_function('$a, $b', $function_data));
}


$dir = opendir('./dotazniky/');
$soubory = array();
while (($soubor = readdir($dir)) !== false) if ($soubor != '.' and $soubor != '..') $soubory[] = array('name' => $soubor, 'time' => filectime('./dotazniky/' . $soubor));
closedir($dir);

sortTwoDimArray($soubory, 'time');

foreach($soubory as $key => $soubor) {
echo '<tr>';
echo '<td align="right">' . strftime('%d.%m.%Y - %H:%M:%S', $soubor['time']) . '&nbsp;</td>';
echo '<td width="70%"><strong><a href="dotazniky/' . $soubor['name'] . '">' . preg_replace('/^(.*).php.?$/', '\1', $soubor['name']) . '</a></strong></td>';
echo '</tr>';
echo "\n";
}
TrueFriend
Profil
Ahoj.Promiň že jsem to nechápal.(díky)
Možná jsem se v tom patlal proto, že jsem to chtěl řadit odshora od nejnovějšího po nejstarší...
možná je to sobotou, nebo nevím.
Každopádně tohle už řadí podle data přidání, ale škoda že od shora od nejstaršího po nejnovější dolů... ale rád bych opačně. Jestli se mi to podaří to nějak upravit, tak to sem napíšu...
TrueFriend
Profil
tak to bylo rychlý... :) jen se přehodí v:
return uasort($data, create_function('$a, $b', $function_data));

$a a $b :) tak aspoň něco mi myslí...
gaminn
Profil *
Jo, jasně, stačí lehce poupravit, popř. vylepšit tu funkci, která řadí, a získáš to, co potřebuješ.

Mohl sis třeba k funkci sorTwoDimArray přidat třetí parametr $order, kterým rozlišovat, jak chceš řadit (pokud ve volání funkce parametr $order vynecháš nebo zadáš 1, bude se řadit jedním směrem, pokud do něj přidáš cokoliv jiného, bude se řadit druhým směrem):



function sortTwoDimArray(&$data, $column, $order = 1) {
if($order === 1) $function_data = 'return mb_strcoll($a[\'' . $column . '\'], $b[\'' . $column . '\']);';
else $function_data = 'return mb_strcoll($b[\'' . $column . '\'], $a[\'' . $column . '\']);';

return uasort($data, create_function('$a, $b', $function_data));
}

sortTwoDimArray($data, $column);
sortTwoDimArray($data, $column, 2);
gaminn
Profil *
Jo, jasně, stačí lehce poupravit, popř. vylepšit tu funkci, která řadí, a získáš to, co potřebuješ.

Mohl sis třeba k funkci sorTwoDimArray přidat třetí parametr $order, kterým rozlišovat, jak chceš řadit (pokud ve volání funkce parametr $order vynecháš nebo zadáš 1, bude se řadit jedním směrem, pokud do něj přidáš cokoliv jiného, bude se řadit druhým směrem):



function sortTwoDimArray(&$data, $column, $order = 1) {
if($order === 1) $function_data = 'return mb_strcoll($a[\'' . $column . '\'], $b[\'' . $column . '\']);';
else $function_data = 'return mb_strcoll($b[\'' . $column . '\'], $a[\'' . $column . '\']);';

return uasort($data, create_function('$a, $b', $function_data));
}

sortTwoDimArray($data, $column);
sortTwoDimArray($data, $column, 2);
Toto téma je uzamčeno. Odpověď nelze zaslat.

0