Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Foreach dla 5 ostatnich wpisów
seweryn
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.08.2012

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


Witam, mam taki kod:

Kod
<?php
        $k = 0;
        foreach ($this->orderlist as $i => $row) {
            $editlink = JRoute::_('index.php?option=com_virtuemart&view=orders&layout=details&order_number=' . $row->order_number);
            ?>
            <tr class="<?php echo "row$k"; ?>">
                <td align="center">
                    <a href="<?php echo $editlink; ?>"><?php echo $row->order_number; ?></a>
                </td>
                <td align="center">
                    <?php echo JHTML::_('date', $row->created_on); ?>
                </td>
                <td align="center">
                    <?php echo JHTML::_('date', $row->modified_on); ?>
                </td>
                <td align="center">
                    <?php echo ShopFunctions::getOrderStatusName($row->order_status); ?>
                </td>
                <td align="center">
                    <?php echo $this->currency->priceDisplay($row->order_total); ?>
                </td>
            </tr>
    <?php
            $k = 1 - $k;
        }
    ?>


Obecnie wyświetla on wszystkie zamówienia składane przez użytkownika.
Co należałoby zmienić/dodać, aby na liście pojawiły się tylko na przykład 5 ostatnich wierszy z danymi, a nie wszystkie?

Bardzo proszę o pomoc.
Z góry dziękuję.
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Jeśli klucze numeryczne (indeksy), to możesz spróbować zamiast:
  1. $k = 0;
  2. foreach ($this->orderlist as $i => $row) {


  1. $temp = range(count($this->orderlist) - 5, count($this->orderlist) - 1);
  2. foreach ($temp as $t) {
  3. $row = $this->orderlist[$t];
  4. // i dalej bez zmian


Ten post edytował darko 24.08.2012, 15:07:05
Go to the top of the page
+Quote Post
seweryn
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.08.2012

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


Dziękuję, działa (wyświetla 6 ostatnich wierszy tabeli).

No i właśnie źle sformułowałem to co chciałbym osiągnąć - chodziło mi o 5 ostatnio dodanych wierszy do tej tabeli, czyli po prostu 5 pierwszych wierszy wyświetlanej tabeli.

Przepraszam, że namieszałem.

Bardzo proszę o uwzględnienie mojego błędu.
Go to the top of the page
+Quote Post
vonski
post
Post #4





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


  1.  
  2. foreach (array_slice($this->orderlist, 0, 5) as $i => $row) { ... }
  3.  


To wyswietli 5 pierwszych elementow z tablicy po ktorej iterujesz.
Go to the top of the page
+Quote Post
darko
post
Post #5





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Ewentualnie, oprócz propozycji powyżej można zrobić tak:
  1. $k = 0;
  2. $licznik = 0;
  3. foreach ($this->orderlist as $i => $row)
  4. {
  5.  
  6. // (...) tutaj Twój kod
  7.  
  8. $licznik++;
  9. if($licznik == 5)
  10. {
  11. break;
  12. }
  13.  
  14. }


Ten post edytował darko 24.08.2012, 15:12:11
Go to the top of the page
+Quote Post
seweryn
post
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.08.2012

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


Oba rozwiązania dają efekt taki jak chciałem.

Dziękuję bardzo za pomoc (IMG:style_emoticons/default/smile.gif)
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: 25.08.2025 - 00:28