Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » NWN 05:07
 » Shark20 02:49
 » MARC 02:08
 » RoBakk 01:51

 Dzisiaj przeczytano
 41125 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2024
A R C H I W A L N A   W I A D O M O Ś Ć
    

[PHP][NEWBIE] Jak posortowac "naturalnie" liste plikow z katalogu? , Tummi 29/09/10 22:46
W wolnych chwilach dziobie sobie w phpie i niestety utknalem :/ Zrobilem "galerie", ktora wyswietlala zdjecia z danego katalogu - wszystko dzialalo cacy, dopoki nie pojawilo sie srodowisko linuxowe + chmura. Jak nie probuje, to pliki mixed - lower-case wyswietlane sa na koncu, bez wzgledu na ich nazwe.
Probowalem
array_multisort($lista_plikow, SORT_ASC, SORT_REGULAR);
ale to nie rozwiazuje problemu :/
Potem znalazlem
natcasesort();
ten nie nadaje sie do mojego zastosowania, bo poruszam sie po tablicy za pomoca ++.


Znalazlem rozwiazanie:
function ignorecasesort(&$array) {
$separator="|<>|";
for($i=0;$i<sizeof($array);$i++) { $array[$i]=strtolower($array[$i]).$separator.$array[$i]; }
sort($array);
for($i=0;$i<sizeof($array);$i++) { $this=$array[$i]; $this=explode($separator,$this); $array[$i]=$this[1]; }
}
ale jest bardzo naokolo moim zdaniem - chcialbym zastosowac cos bardziej eleganckiego i nauczyc sie czegos nowego.

Bede wdzieczny za wszelkie hinty - wygooglam sobie szczegoly.

T.

www.skocz.pl/uptime :D

  1. dziwnie zadajesz pytania , Grocal 29/09/10 22:52
    1. Podaj przykład. Najlepiej w formacie: dane wejściowe / dane oczekiwane na wyjściu. Nie jesteśmy wróżkami, żeby wiedzieć, co chcesz posortować, jaką strukturę danych?

    2. Uprzedzając fakty. Dlaczego natcasesort() jest zły? Co to znaczy, że "poruszasz się po tablicy za pomocą ++" i jaki to ma wpływ na fakt, że powyższa funkcja "nie nadaje się"?

    Na pewno, na razie, w ogóle...
    Naprawdę, naprzeciwko, stąd...
    Ortografia nie gryzie!

  2. Wrzuć przykładową tablicę do posortowania i tyle , Norton 29/09/10 23:09
    I zobaczymy w czym problem.

    Zmień swój podpis na Boardzie
    maks 100 znaków, 3 linie,
    zabroniony spam oraz reklama

    1. I wytłumacz o co choźi z tym ++ , Norton 29/09/10 23:12
      masz na myśli pentelku for czy jak

      Zmień swój podpis na Boardzie
      maks 100 znaków, 3 linie,
      zabroniony spam oraz reklama

  3. tadam , Tummi 30/09/10 00:01
    Na wejsciu mam tablice z nazwami plikow z katalogu:
    [0] => IMGR2618.JPG
    [1] => IMGR2457.JPG
    [2] => IMGR2796.JPG
    [3] => IMGR2450.JPG
    itd. Kolejnosc jest zupelnie losowa (spowodowane przez hosting ovh.pl w chmurze?).

    Po posortowaniu tablicy:

    array_multisort($lista_plikow, SORT_ASC, SORT_REGULAR);

    otrzymuje pieknie posortowane nazwy plikow uppercase, a na koncu mixed i lower-case, wycinek zawierajacy babola:
    [39] => IMGR2858.JPG
    [40] => imgR2874.JPG
    [41] => imgr2864.jpg
    Chcialbym po prostu miec posortowane po nazwie pliku bez wzgledu na wielkosc liter.


    Po tablicy jade najzwyklejsza petla, zwiekszajac licznik przy kazdym przejsciu za pomoca ++:

    echo "<img src='$lista_plikow[$i]' alt='$lista_plikow[$i]'> <BR><BR>";
    $i++;


    Katalog odczytuje za pomoca

    $file = readdir($handle)

    i wrzucam sobie w tablice przez

    $lista_plikow[$i] = $file;


    natcasesort() powoduje posortowanie nazw plikow, ale zachowuje klucze przypisane do wartosci - a ja odczytuje tablice poruszajac sie licznikiem wlasnie po kluczach, bo inaczej jeszcze ;) nie potrafie.

    T.

    www.skocz.pl/uptime :D

    1. gotowe rozwiazanie ;) , Tummi 30/09/10 00:17
      usort($lista_plikow, "strcasecmp");

      Brakuje mi listy wartosci jakie moze przyjac drugi argument usorta ;) Znalazlem "strcasecmp" w jakims komentarzu na php.net i dziala :D Wiedzialem, ze da sie to jakos schludnie rozwiazac :D

      T.

      www.skocz.pl/uptime :D

      1. tak jak napisali w dokumentacji , Deus ex machine 30/09/10 00:19
        http://php.net/manual/en/function.usort.php

        bool usort ( array &$array , callback $cmp_function )

        krótko pisząc Ty użyłeś tego http://pl2.php.net/...l/en/function.strcasecmp.php

        "Uti non Abuti"

        1. dokladnie tak, , Tummi 30/09/10 00:30
          tylko nie wiem, w jaki sposob mam sie domyslic, ze pod "callback $cmp_function" moge wstawic "strcasecmp"?

          T.

          www.skocz.pl/uptime :D

          1. no tu już angielski poćwicz , Deus ex machine 30/09/10 08:32
            callback $cmp_function - po tym właśnie możesz poznać. Ogólnie php.net Twoim przyjacielem na długie lata, moim jest ciągle ,)

            "Uti non Abuti"

    2. no to jeszcze maly hint , Grocal 30/09/10 00:33
      >>> natcasesort() powoduje posortowanie nazw plikow,
      >>> ale zachowuje klucze przypisane do wartosci - a ja
      >>> odczytuje tablice poruszajac sie licznikiem wlasnie
      >>> po kluczach, bo inaczej jeszcze ;) nie potrafie.

      foreach
      http://php.net/...n/control-structures.foreach.php

      Na pewno, na razie, w ogóle...
      Naprawdę, naprzeciwko, stąd...
      Ortografia nie gryzie!

      1. dzieki, , Tummi 30/09/10 00:39
        zostawiam zakladke otwarta, bo juz nie przyswajam nowej wiedzy - na dzisiaj wystarczy, dobranoc wszystkim i jeszcze raz dzieki za pomoc.

        T.

        www.skocz.pl/uptime :D

        1. 123 , Norton 30/09/10 00:59
          <?php

          $arr[39] = 'IMGR2858.JPG';
          $arr[40] = 'imgR2874.JPG';
          $arr[41] = 'imgr2864.jpg';


          natcasesort($arr);

          foreach($arr as $img) {
          echo $img.'<br />';
          }

          ?>

          Zmień swój podpis na Boardzie
          maks 100 znaków, 3 linie,
          zabroniony spam oraz reklama

    
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL