Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie tablicy
Forum PHP.pl > Forum > PHP
C-4
Witam
PHP bawie się tylko w wolnych chwilach i dość żadko i jak zwykle to bywa z początkującymi natrafiłem na problem a mianowicie mam tablicę
  1. <?php
  2. $tablica [$n][czas] = $liczba_sekund;
  3. $tablica [$n][agresorx] = $agresor[x];
  4. $tablica [$n][agresory] = $agresor[y];
  5. $tablica [$n][nazwajedn] = $agresor[nazwajedn];
  6. $tablica [$n][nazwa] = $agresor[nazwa];
  7. $tablica [$n][d] = $liczba_dni;
  8. $tablica [$n][h] = $liczba_godzin;
  9. $tablica [$n][m] = $liczba_minut;
  10. $tablica [$n][s] = $liczba_sekund;
  11. $tablica [$n][atakowanax] = $atakoawana[x];
  12. $tablica [$n][atakowanay] = $atakoawana[y];
  13. $tablica [$n][atakowananazwa] = $atakoawana[nazwa];
  14. ?>


Chciałbym aby rekordy w tablicy były posortowane po polu [czas] w związku z tym zastosowałem funkcję
  1. <?php
  2. array_multisort($tablica, SORT_DESC);
  3. ?>

i w większej części wyniki mam posortowane ale zdaża wię że linia która nie powinna się znaleźć w tym miejscu lecz zupełnie gdzie indziej. Nie mam pojęcia jak to ugryść szukałem w google ale nic nie znalazłem.
Proszę Pomóżcie
Pzdrawiam.
nospor
Cytat
Chciałbym aby rekordy w tablicy były posortowane po polu [czas] w związku z tym zastosowałem funkcję
CODE
array_multisort($tablica, SORT_DESC);
Nie pamietam by mi padlo na wzrok, ale powiedz mi gdzie w tym kodzie mowisz ze sortujesz po czasie? To ze ty sobie powiesz na glos: sortuj po czasie to dla php jest nic nie warte winksmiley.jpg

zajrzyj do manuala do opisu tej funkcji i tam masz podanie dokladnie co masz zrobic.
C-4
z tgo co ja zrozumiałem z tego manuala to ta funkcja powinna sortować po pierwszym polu a pierwszym polem w tablicy jest czas. niestety nie bardzo rozumiem tego manuala i nie bardzo wiem jak to mam zastosować więc próbuję róznych sposobów ale na razie mi nie wychodzi.

W sumie to tablica jest posortowana tylko pierwszy wpis nie jest brany pod uwagę reszta jest posortowana
nospor
http://pl2.php.net/manual/pl/function.array-multisort.php
Napisane po polsku:
Cytat
W tym przykładzie, dane zostaną posortowane według pola numer malejąco, oraz względem pola edycja rosnąco.

W zmiennej znajduje się tablica wierszy, lecz array_multisort() wymaga tablicy kolumn, tak więc należy zastosować poniższy kod aby uzyskać kolumny, a następnie przeprowadzić sortowanie.
<?php
// Pobierz listę kolumn
foreach ($dane as $klucz => $wiersz) {
$numer[$klucz] = $wiersz['numer'];
$edycja[$klucz] = $wiersz['edycja'];
}

// Posortuj dane według numeru malejąco i edycji rosnąco
// Należy podać $dane jako ostatni parametr aby posortować według wspólnego
// klucza
array_multisort($numer, SORT_DESC, $edycja, SORT_ASC, $dane);
C-4
Wpisałem
  1. <?php
  2. foreach ($tablica as $klucz => $wiersz) {
  3. $numer[$klucz] = $wiersz['czas'];
  4.  
  5. }
  6. array_multisort($numer, SORT_DESC, $tablica);
  7. ?>

A w wyniku dowstałem
  1. <?php
  2. Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in /home/daropon/domains/caba-it.com/public_html/plemiona/pz/4.php on line 143
  3. ?>


i tablice zupełnie nie posortowaną
Stosując tylko
array_multisort($tablica, SORT_DESC);
otrzymuję tablice posortowaną oprócz pierwszego wpisu czyli $tablica[0][czas] zostaje baz zmian sad.gif
nospor
uzywaj wlasciwego bbcode.

wymiary tablic nie pasują. pokaz caly kod jak to dales, wlacznie z tworzeniem tej $tablica i uzyj wlasciwego bbcode tym razem
C-4
ok sorry z tim bb-code już wiem co źle robiłem

a więc tworzenie tablicy

  1. <?php
  2. for($n = 0; $n < $wioski[$i]; $n++)
  3.  {
  4. $tablica [$n][czas] = $liczba_sekund;
  5. $tablica [$n][agresorx] = $agresor[x];
  6. $tablica [$n][agresory] = $agresor[y];
  7. $tablica [$n][nazwajedn] = $agresor[nazwajedn];
  8. $tablica [$n][nazwa] = $agresor[nazwa];
  9. $tablica [$n][d] = $liczba_dni;
  10. $tablica [$n][h] = $liczba_godzin;
  11. $tablica [$n][m] = $liczba_minut;
  12. $tablica [$n][s] = $liczba_sekund;
  13. $tablica [$n][atakowanax] = $atakoawana[x];
  14. $tablica [$n][atakowanay] = $atakoawana[y];
  15. $tablica [$n][atakowananazwa] = $atakoawana[nazwa];
  16.  
  17. }
  18. ?>


sortowanie
  1. <?php
  2. array_multisort($tablica, SORT_DESC);
  3. ?>


stosując takie sortowanie otrzymuję tablice posortowaną oprócz pierwszego wpisu który pozostaje bez zmina.

w momencie kiedy zastosowałem ten kod
  1. <?php
  2. foreach ($tablica as $klucz => $wiersz) {
  3. $numer[$klucz] = $wiersz['czas'];
  4.  
  5. }
  6. array_multisort($numer, SORT_DESC, $tablica);
  7. ?>

wywaliło mi błąd o którym pisałem wcześniej
nospor
po zrobieniu symulacji twojego kodu:
  1. <?php
  2. for($n = 0; $n < 10; $n++)
  3.  {
  4. $tablica [$n][czas] = $n;
  5. $tablica [$n][agresorx] = 'cos tam';
  6.  
  7. }
  8.  
  9. foreach ($tablica as $klucz => $wiersz) {
  10. $numer[$klucz] = $wiersz['czas'];
  11.  
  12. }
  13. array_multisort($numer, SORT_DESC, $tablica);
  14.  
  15. print_r($tablica);
  16. ?>

Otrzymuje poprawny wynik.
Moze ty te $tablica gdzies jeszcze zmieniasz lub cos innego robisz. trudno mi powiedziec, bo to co pokazales to raczej nie jest caly kod winksmiley.jpg
C-4
No cóż czeski błąd mi się wkradł (choć nie wiem gdzie on był bo teraz faktycznie działa) teraz wszystko działa poprawnie chyba za nerwowy rocznik jestem biggrin.gif i wszystko bym za szybko chciał mieć.
ten kod
  1. <?php
  2. foreach ($tablica as $klucz => $wiersz) {
  3. $numer[$klucz] = $wiersz['czas'];
  4.  
  5. }
  6. array_multisort($numer, SORT_DESC, $tablica);
  7.  
  8. print_r($tablica);
  9. ?>

działa poprawnie i sortuje wszystko od pierwszego elementu tablicy.
Wielkie dzięki za pomoc, Jak będziesz gdzieś blisko Dąbrowy Górniczej zapraszam na piwo winksmiley.jpg
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.