Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wczytywanie danych z pliku + sortowanie wybr. elem.
Forum PHP.pl > Forum > Przedszkole
Geniesis
Witam serdecznie.
Napotkałem się z takim oto problemem:
mam plik z danymi osób:
//usr1
pesel
imie
nazwisko
itd(łącznie 14)

//usr2
pesel
imie
nazwisko
itd(łącznie 14)

moim zadaniem jest posortowanie użytkowników danych wg nazwisk, tak więc napisałem skrypt, który wrzuca zawartość pliku do tablicy
po czym ma nadpisywać same nazwiska do $dataNoSortSurName jednak nie zapisuje mi konkretych wartości z $tabNoSortClass tylko "ArrayArrayArrayArray"
rozwiązaniem problemu w teorii mogłby być zapis $dataNoSortSurName[$A] jednak to nie rozwiązuje całkowitego problemu, gdyż trzeba to później posortować i porównywać posortowane dane. musiałbym to mieć w postaci $dataNoSortSurName= array( "nazw1","nazw2"); chciałem to osiągnąć za pomocą pętli for jednak w kodzie nie można do array wrzucić for by się wykonywał, a ręczne przypisanie też odpada, ponieważ ilość użytkowników będzie się zmieniać.

Czy byłby ktoś w stanie poradzić mi jak zamierzany efekt uzyskać, lub zaproponuje lepsze rozwiązanie owego sortowania?

Pozdrawiam.

CODE
$tabNoSortClass=file("./data/class/1/childrens.txt", FILE_IGNORE_NEW_LINES); //zapis zawartości do tablicy
$a=3; //wg tablicy tutaj mamy nazwisko
$tnsc=count($tabNoSortClass)/14;
for ($A=0;$A<=$tnsc;$A++){
$dataNoSortSurName= array($tabNoSortClass[$a]); //tutaj pojawia sie problem
$a+=14;
echo $dataNoSortSurName;
}
sort($dataSortNoSurName);
$clength=count($dataSortNoSurName);
for($x=0;$x<$clength;$x++){
echo $dataSortNoSurName[$x];
}



Pyton_000
Możesz zbudować sobie tablicę z pliku w postaci:
  1. 0 => array(
  2. 'imie' => 'sss',
  3. 'nazwisko => 'cccc',
  4. ....
  5. ),
  6. 1 => array(
  7. 'imie' => '2sss',
  8. 'nazwisko => '2cccc',
  9. ....
  10. ),)

A potem użyć usort (Example #2) i posortować po czym chesz a potem to już tylko z górki
Geniesis
Jest mały problem, ponieważ tablica $tabNoSortClass ma wartości:
Kod
Array
(
    [0] => 123456789
    [1] => 1
    [2] => Grzegorz
    [3] => Moh
    [4] => 12-12-2012
    [5] => Joanna
    [6] => Patyk
    [7] => Mole
    [8] => 12
    [9] => 0
    [10] => 42-424
    [11] => 123456789
    [12] => test1@test.pl
    [13] =>
    [14] => 234567890
    [15] => 1
    [16] => Patyk
    [17] => Opa
    [18] => 11-12-2012
    [19] => Kunegunda
    [20] => Piotr
    [21] => Opatowice
    [22] => 12
    [23] => 12
    [24] => 42-575
    [25] => 234567890
    [26] => test2@test.pl
    [27] =>
)

Chce to sobie uporządkować by co powtórzenie przypisywało to do kolejnego użytkownika (dokładnie tak jak napisałeś w przykładzie)
wg mojej logiki powinno być to tak:

Kod
                                $tabNoSortClass=file("./data/class/1/childrens.txt", FILE_IGNORE_NEW_LINES);
                    for($A= 0;$A<=count($tabNoSortClass);$A++){                                            //pętla wykonuje się wg długości tablicy
                    if($A%14==0){
                        $B++;                                                                                        //jeżeli rozpocznie się powtórzenie to następny użytkownik
                    }
                    $dataNoSortChildren[$B]=array($tabNoSortClass[$A]);                         //użytkownik[1] = tablicy 14 pierwszych elem. później //użytkownik[2] = tablicy 14 kolejnych elem itd.
                                        
                }

Faktycznie tablice wyglądają w ten sposób:
Kod
Array
(
    [1] => Array  
        (
            [0] =>                                                  //w pliku puste miejsce przypada na 14, gdy w w/w warunku dam inną liczbę to wartość tablicy zmienia się  
        )

    [2] => Array
        (
            [0] =>
        )
)

Mógłbyś mnie oświecić gdzie popełniłem błąd, że tablica nie wyświetla sie w sposób, który wcześniej napisałeś?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.