Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[php]wyświetlenie nazw plików o największej cyfrze

13 May 2009 19:17 1136 7
  • Level 10  
    Witam

    Do tej pory wczytywałem wszystkie nazwy plików do skryptu i wyświetlałem je na stronie. Mogłem to robić bo plików było mało czyli 20.

    nazwy plików to np

    adam_111.txt
    michal_23.txt itp

    robiłem to za pomocą

    Code:
    <?php
    
    foreach(glob('klient/*.txt', GLOB_BRACE) as $file)
    {
       if($file != '.' && $file != '..')
           echo basename(rtrim($file, '/'), '.txt') . '<br />';
    }
    ?>


    Niestety teraz pojawia się problem ponieważ tych plików jest ponad 200.
    Chciałbym zrobić aby wyświetliło się tylko 50 (ze wszystkich plików) plików, które mają największą cyfrę w nazwie oraz aby te pliki posortować od największego do najmniejszego.

    Czytałem, że należy wykorzystać natsort jednak nie mam pojęcia jak to zastosować w moim przypadku.

    proszę o pomoc
    z góry dziękuje
  • Level 42  
    CZy wszystkie pliki mają ten sam styl nazwy?
    Jeśli tak, to proponuję (tak z głowy piszę)
    Code:

    $tablica[(int)substr($plik_nazwa,strpos($plik_nazwa,'_')+1,strpos($plik_nazwa,'.')-,strpos($plik_nazwa,'_'))]=$plik_nazwa;
    ksort($tablica)
  • Level 18  
    A nie lepiej użyć kodów ASCII ?
    jeśli kod znaku oznacza cyfrę
    to niech ją składa aż do momentu wystąpienia kropki i wrzuca do jakiejś
    pomocniczej tabeli, którą później posortujesz i wyświetlisz.

    taki pomysł ... są szybsze ?
  • VIP Meritorious for electroda.pl
    Spróbuj użyć tzw. transformaty Schwartza:
    Code:
    function sort_file_list($list) {
    
        $transformed = array();
        $matches = array();
        foreach ($list as $filename) {
            if (preg_match('/\d+/', $filename, $matches)) {
                // w nazwie pliku jest ciąg cyfr
                // użyj liczby jako klucza w tablicy asocjacyjnej
                $transformed[(integer)($matches[0])] = $filename;
            } else {
                // obsłuż błąd?
            }
        }
        // sortuj tablicę wg. kluczy
        ksort($transformed);
        // zwróć wartości z posortowanej tablicy
        return array_values($transformed);
    }
    Pozdrawiam,
    Dr.Vee
  • Level 42  
    jakubw - nic innego nie zaproponowałeś od mojego rozwiązania ;) Dr jedynie trafnie skorzystał z wyszukiwania wyrażeniem regularnym. :) Choć ma swoje walety i zady... Np. jeśli format jest zawsze identyczny, lecz w pierwszym członie wystąpi liczba... może ja bym zapisał wyrażenie jako '#_([0-9]+)#'? Wszystko zależy, jakie mogą być nazwy plików...
  • Level 18  
    No właśnie. Zawsze sprawa się rozbija o wyjątki ... :D.
  • Level 10  
    nazwy plików mają ten sam system czyli np

    adam_1.txt
    dom_44.txt

    w pierwszej cześci nazwy nie można wpisać cyfry dopiero po znaku _

    spróbuje obu rozwiązań :) i się odezwę