Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odwrócenie kolejności tablicy
Forum PHP.pl > Forum > Przedszkole
Demerzel
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ć?
piotrooo89
array_reverse
Demerzel
Ś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?
Blame
Znaczy że do funkcji nie przekazujesz tablicy, pokaż nam ten kawałek kodu około 50 linijki.
piotrooo89
ż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.
Demerzel
  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.
nospor
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);

?
Demerzel
A no cieżko bo całość działa w połączeniu ze smartami.
nospor
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źć
Demerzel
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.
nospor
daj:
die('koniec');
na koncu kodu co ci podalem a uwierz na słowo coś ci się wyswietli winksmiley.jpg
jasin
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).
Demerzel
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.
piotrooo89
nie podajesz cały czas jako argumentu tablicy! musisz ją podać jak chcesz ją odwrócić przecież to jest logiczne.
nospor
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 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
Demerzel
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. wstydnis.gif
nospor
ty tego kodu nie powtarzasz przypadkiem kilkukrotnie?
Demerzel
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ą?
nospor
Cytat
. Jak w takim razie dać warunek aby wykonać funkcje reverse jeżeli zmienna jest tablicą?

NIe przesadzasz?
IF + is_array()
Demerzel
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.
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.