Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie tablicy
C-4
post 16.05.2008, 12:28:47
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 16.05.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował C-4 16.05.2008, 13:50:03
Go to the top of the page
+Quote Post
nospor
post 16.05.2008, 12:30:53
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
C-4
post 16.05.2008, 12:53:50
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 16.05.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował C-4 16.05.2008, 13:00:38
Go to the top of the page
+Quote Post
nospor
post 16.05.2008, 13:01:01
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
C-4
post 16.05.2008, 13:10:12
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 16.05.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował C-4 16.05.2008, 13:50:45
Go to the top of the page
+Quote Post
nospor
post 16.05.2008, 13:24:53
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




uzywaj wlasciwego bbcode.

wymiary tablic nie pasują. pokaz caly kod jak to dales, wlacznie z tworzeniem tej $tablica i uzyj wlasciwego bbcode tym razem


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
C-4
post 16.05.2008, 13:49:17
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 16.05.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 16.05.2008, 13:53:33
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
C-4
post 16.05.2008, 14:14:26
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 16.05.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował C-4 16.05.2008, 14:21:45
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 05:38