Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Jak uprościć pętle dla tablicy
Malinaa
post 3.10.2011, 08:13:45
Post #1





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

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


Witam,
mam taką pętle i tablice

  1. $limit = 0;
  2. foreach ($array as $klucz => $wartosc) {
  3. if ($limit < 3) {
  4. $link = $array_url[$klucz];
  5. $title = $array_title[$klucz];
  6.  
  7. echo "<li><a href=\"".$link."\">".$title ."</a></li>";
  8.  
  9. $limit ++;
  10. }
  11. else break; // Limit petli
  12. }


i mam pytanie.

Jak uprościć pętle, albo jakiej pętli użyć, aby ograniczyć wyświetlanie danych do trzech pierwszych kluczy, przy czym wartość kluczy może być w każdej chwili różna. Czy można to zrobić bez zmiennej $limit i jak pozbyć się z pętli wartości $wartosc?
Wewnątrz pętli potrzebne są tylko wartości kluczy $klucz.



--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
wookieb
post 3.10.2011, 08:27:18
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. foreach(array_slice($array, 0, 3) as $klucz => $wartosc) {


--------------------
Go to the top of the page
+Quote Post
maviozo
post 3.10.2011, 11:25:46
Post #3





Grupa: Zarejestrowani
Postów: 197
Pomógł: 24
Dołączył: 22.11.2010

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


Można byłoby jeszcze pójść dalej:
Kod
    foreach(array_keys(array_slice($array, 0, 3)) as $klucz) {
Go to the top of the page
+Quote Post
Malinaa
post 4.10.2011, 13:30:05
Post #4





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

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


wcześniej nie było kiedy sprawdzić,
sprawdzam teraz array_slice() nie działa mi prawidłowo - kolejność danych się zmienia
natomiast array_keys() jest ok

teraz jest tak:

  1. $limit = 0;
  2. foreach(array_keys($tablica_ocena_srednia) as $klucz) {
  3. if ($limit < 3) { }
  4. else break;
  5. }


Czy można jeszcze uprościć, bez $limit i funkcji array_slice() ?


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
peter13135
post 4.10.2011, 13:35:08
Post #5





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


ten sposób wydaje mi się nieoptymalny, ponieważ "array_keys($tablica_ocena_srednia)" jest odpalane za każdym "przelotem" pętli (poprawcie jeśli się mylę).
jak nie chcesz mieć limit, to daj for($i=0; $i<3; $i++)

Ten post edytował peter13135 4.10.2011, 13:44:26


--------------------
:)
Go to the top of the page
+Quote Post
phpion
post 4.10.2011, 13:45:50
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(peter13135 @ 4.10.2011, 14:35:08 ) *
ten sposób wydaje mi się nieoptymalny, ponieważ "array_keys($tablica_ocena_srednia)" jest odpalane za każdym "przelotem" pętli (poprawcie jeśli się mylę).

Zatem poprawiam Cię. Sprawdź to:
  1. function my_array_keys(array $array) {
  2. echo 'Go!';
  3.  
  4. return array_keys($array);
  5. }
  6.  
  7. $array = array(1, 2, 3);
  8.  
  9. foreach (my_array_keys($array) as $item) {};
Go to the top of the page
+Quote Post
Malinaa
post 4.10.2011, 13:47:47
Post #7





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

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


Ok czyli jednak tak jak miałem na początku bez funkcji array_keys() .

Pętli for nie mogę tutaj użyć, ponieważ jak pisałem klucz jest nie znany, różny.
Pętli foreach to nie przeszkadza, ale w for kto odgadnie klucz?


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
peter13135
post 4.10.2011, 13:51:25
Post #8





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


  1. $limit = 0;
  2. foreach(array_keys($tablica_ocena_srednia) as $klucz) {
  3. if ($limit < 3) { }
  4. else break;
  5. }

ten kod powinien działać tak samo jak ten:
  1. $keys = array_keys($tablica_ocena_srednia);
  2. for($i=0; $i<3; $i++) {
  3. echo 'klucz:' . $keys[$i] . ', wartosc: ' . $tablica_ocena_srednia[$i] ;
  4. }


--------------------
:)
Go to the top of the page
+Quote Post
Malinaa
post 4.10.2011, 14:06:03
Post #9





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

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


i działa.

Thanks


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
wookieb
post 4.10.2011, 14:08:39
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A próbowałeś ustawić preserve_keys na true? http://pl2.php.net/array_slice

Zawsze jeszcze można hardkorowo biggrin.gif
  1. foreach (new LimitIterator(new ArrayIterator($tablica), 0, 3) as $key => $value) {
Powód edycji: [wookieb]:


--------------------
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: 21.06.2025 - 14:02