Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> odwrócenie kolejności tablicy, Jak odwrócić kolejność tablicy asocjacyjnej
Demerzel
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


Tablica powstaje z zapytania
  1. GetRow("SELECT number, cdate, paytime, value, description FROM documents, invoicecontents WHERE number<'$idheck' AND customerid = ? AND type=1 AND closed=0 AND id=docid ORDER BY number DESC", array($cid));

Użyte sortowanie DESC pomaga przy obliczeniach. W kazdym razie po takim stworzeniu tablicy wszystko jest ślicznie poza tym,że należy ją posortować w odwrotnym kierunku
czyli to co się znajduje pod array[5] ma sie znaleść na array[1], [4] na [2] itp. Pytanie brzmi jak to zrobić?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




array_reverse
Go to the top of the page
+Quote Post
Demerzel
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


Śmieje sie z wasnej głupoty. Znalazłem tą funkcję wcześniej ale coś skopałem, nie będe sie chwalił co. Dziękuje za ponowne wskazanie kierunku, działa.
Tyle że dostaje komunikat
Warning: array_reverse() [function.array-reverse]: The argument should be an array in /var/www/lms/documents/templates/wezwanie/engine.php on line 50
Jako, że działa muszę sie go tylko pozbyć, jak?

Ten post edytował Demerzel 14.12.2009, 20:58:47
Go to the top of the page
+Quote Post
Blame
post
Post #4





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Znaczy że do funkcji nie przekazujesz tablicy, pokaż nam ten kawałek kodu około 50 linijki.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




żeby odwrócić tablice bądź co bądź musisz jako argument funkcji podać tablicę na której chcesz działać, ty tego nie robisz więc masz problem.
Go to the top of the page
+Quote Post
Demerzel
post
Post #6





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


  1. while ($saldo>0)
  2. $customerdocuments[$pos]= $DB->GetRow("SELECT number, cdate, paytime, value, description FROM documents, invoicecontents WHERE number<'$idheck' AND customerid = ? AND type=1 AND closed=0 AND id=docid ORDER BY number DESC", array($cid));
  3. if ($saldo>=0) $customerdocuments[$pos]['reszta']=$customerdocuments[$pos]['value'];
  4. if ($saldo<0) $customerdocuments[$pos]['reszta']=$sa;
  5. }
  6. $customerdocuments=array_reverse($customerdocuments);

Pętla daje taki wynik jak bym chciał, do jej końca wszystko mi pasuje. Po jej zamknięciu zaczyna się problem a jest nim ta jedna linijka.
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




pewnie ciezko jest zrobic cos takiego:
  1. while ($saldo>0)
  2. $customerdocuments[$pos]= $DB->GetRow("SELECT number, cdate, paytime, value, description FROM documents, invoicecontents WHERE number<'$idheck' AND customerid = ? AND type=1 AND closed=0 AND id=docid ORDER BY number DESC", array($cid));
  3. if ($saldo>=0) $customerdocuments[$pos]['reszta']=$customerdocuments[$pos]['value'];
  4. if ($saldo<0) $customerdocuments[$pos]['reszta']=$sa;
  5. echo 'w pętli:';
  6. print_r($customerdocuments);
  7. }
  8. echo 'po pętli:';
  9. print_r($customerdocuments);
  10.  
  11. $customerdocuments=array_reverse($customerdocuments);

?
Go to the top of the page
+Quote Post
Demerzel
post
Post #8





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


A no cieżko bo całość działa w połączeniu ze smartami.
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




sorki, ale co ma piernik do wiatraka? Przeciez wpialem ci kod php do kodu php. A to ze gdzies po drodze masz smarty to nie ma nic do rzeczy. Zrob wiec ten kod co ci podalem a zobaczysz to i owo

ps: przenoszę ten temat tam gdzie juz dawno powinien sie znaleźć
Go to the top of the page
+Quote Post
Demerzel
post
Post #10





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


To, że kod w tym pliku wykonuje operacje na danych wrzuca wszystko do tablicy smartów i gdzie indziej z tablic smartów dane są wyżucane. Wstawienie tutaj printa niczego mi nie wyświetli. Jest to element większej całości. A w ten sposób wyświetlać sobie informacje ptubowałem. Żeby coś zobaczyć musiałem podstawiać do tablic.
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




daj:
die('koniec');
na koncu kodu co ci podalem a uwierz na słowo coś ci się wyswietli (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
jasin
post
Post #12





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


Jakoś niefortunnie skopiowałeś kod php ponieważ jest jakaś klamra - nie wiadomo od jakiego bloku ...
  1. while ($saldo>0)
  2. $customerdocuments[$pos]= $DB->GetRow("SELECT number, cdate, paytime, value, description FROM documents, invoicecontents WHERE number<'$idheck' AND customerid = ? AND type=1 AND closed=0 AND id=docid ORDER BY number DESC", array($cid));
  3. if ($saldo>=0) $customerdocuments[$pos]['reszta']=$customerdocuments[$pos]['value'];
  4. if ($saldo<0) $customerdocuments[$pos]['reszta']=$sa;
  5.  
  6. echo '<pre>';
  7. var_export($customerdocuments);
  8. }
  9. $customerdocuments=array_reverse($customerdocuments);

W PHPTALu dodanie exit powinno przerwać całe wyświetlanie i wywalić białą stronę z ładną tablicą ... (dawno nie robiłem ze smarty ale chyba też tak można).
Go to the top of the page
+Quote Post
Demerzel
post
Post #13





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


Dzięki z die to już coś. Zrobiłem tak
  1. #
  2. echo 'w pętli:';
  3. #
  4. print_r($customerdocuments);
  5. } //koniec pętli
  6. #
  7. echo 'po pętli:';
  8. #
  9. print_r($customerdocuments);
  10. $customerdocuments=array_reverse($customerdocuments);
  11. die('koniec');
  12. $number = docnumb

Dostałem:
  1. po ptli:
  2. Warning: array_reverse() [function.array-reverse]: The argument should be an array in /var/www/lms/documents/templates/wezwanie/engine.php on line 58
  3. koniec


Z die masz całkowitą racje, pytanie co skopałem.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nie podajesz cały czas jako argumentu tablicy! musisz ją podać jak chcesz ją odwrócić przecież to jest logiczne.
Go to the top of the page
+Quote Post
nospor
post
Post #15





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




Cytat
pytanie co skopałem.

No jak widzisz po rezultacie wyswietlilo ci się tylko "po petli", czyli nie weszlo do petli. A nie weszlo do petlo bo warunek nie jest spelniony. No i teraz sobie sprawdź dlaczego ten warunek nie jest spelniony. Tylko proszę, nie każ mi znowu pisać jak uzywac echo i print (IMG:style_emoticons/default/winksmiley.jpg)

@piotrooo89 przeczytałeś chociaż całość tak trochę dokładniej? My to już wiemy ze nie podaje tablicy, teraz autor sie zastanawia czemu do petli nie wchodzi bo myslal ze wchodzi
Go to the top of the page
+Quote Post
Demerzel
post
Post #16





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


Zrobiłem nieco inaczej i się zdziwiłem, robie tak:
  1. if ($saldo<0) $customerdocuments[$pos]['reszta']=$sa;
  2. }
  3. print_r($customerdocuments);
  4. $customerdocuments=array_reverse($customerdocuments);

Dostałem:
  1. Warning: array_reverse() [function.array-reverse]: The argument should be an array in /var/www/lms/documents/templates/wezwanie/engine.php on line 51
  2. Array ( [0] => Array ( [number] => 17 [cdate] => 1260813504 [paytime] => 14 [value] => 80.00 [description] => dwa [reszta] => 70 ) )

Poniżej znajduje się cała zawartość generowana przez smarty i wszystko się zgadza.
Dziękuje za pomoc ale proszę o wyrozumiałość po x godzinachi y kawach aby dojść do tego punktu niewszystko jest dla mnie zrozumiałe. (IMG:style_emoticons/default/wstydnis.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #17





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




ty tego kodu nie powtarzasz przypadkiem kilkukrotnie?
Go to the top of the page
+Quote Post
Demerzel
post
Post #18





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


Cały silnik php jest wywoływany kilkukrotnie w tym konkretnym przypadku 2 razy generując 2 zestawy danych dla dwóch osób. Wniosek dla jednej osoby zmienna ma fomę tablicy dla drugiej nie? Na dobrą sprawę by się zgadzało. Jak w takim razie dać warunek aby wykonać funkcje reverse jeżeli zmienna jest tablicą?
Go to the top of the page
+Quote Post
nospor
post
Post #19





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




Cytat
. Jak w takim razie dać warunek aby wykonać funkcje reverse jeżeli zmienna jest tablicą?

NIe przesadzasz?
IF + is_array()
Go to the top of the page
+Quote Post
Demerzel
post
Post #20





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 14.08.2007

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


Czy nie przesadzam? Przyznaje sią, że z PHP ostatnio miałem do czynienia 2lata temu i to też daleko od zawodowstwa. Lepiej u mnie z rozwiązywaniem problemów serwer/desktop Linuksa. A teraz spadło mi na głowę zrobienie "małego co nieco". Dziękuje wam bardzo za pomoc.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.09.2025 - 17:33