Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak uprościć pętle dla tablicy
Forum PHP.pl > Forum > Przedszkole
Malinaa
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.

wookieb
  1. foreach(array_slice($array, 0, 3) as $klucz => $wartosc) {
maviozo
Można byłoby jeszcze pójść dalej:
Kod
    foreach(array_keys(array_slice($array, 0, 3)) as $klucz) {
Malinaa
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() ?
peter13135
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++)
phpion
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) {};
Malinaa
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?
peter13135
  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. }
Malinaa
i działa.

Thanks
wookieb
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) {
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.