Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]większy przeskok foreach
Forum PHP.pl > Forum > Przedszkole
kask18
Witam czy się da sparametryzować foreach tak żeby skakała nie po kolejnych elementach tablicy ale np co 3 questionmark.gif W manualu nie mogłem się doszukać albo pasował by gdybym miał np tab 5-elementową tyle że jej indeksy nie są ciągłe czyli np (2, 5, 1, 8, 3). i chciałbym czytanie tablicy rozpocząć od 3 elementu. czyli od 1 bez konieczności posługiwania się jakimiś dodatkowymi ifami w pętli. Z góry dzięki za pomoc.
phpion
Uporządkuj indeksy poprzez:
  1. $tab = array_values($tab);

a potem zrób zwykłą pętlę for zwiększając jej licznik za każdym razem o 3, a nie o 1 (czyli $i+=3 zamiast $i++).
VGT
opcjonalnie, jesli chcesz zostac przy foreach, takie cos powinno zadzialac:

  1. $iLicznik = 0;
  2. foreach ($aDane as $sRekord)
  3. {
  4. if (++$iLicznik % 3 != 0)
  5. continue;
  6. //kod dla co 3 rekordu
  7. }
kask18
chodzi o to że nie mogę uporządkować indeksów. Mają one dla mnie znaczenie. Chciałbym po prostu chciałbym przeczytać z klika elementów z tablicy zaczynając np od 10 elementu bez zbędnych forów i ifów
darko
Zapoznaj się z funkcją array_slice, albo opisz dokładniej swój problem.
kask18
niestety funkcja array_slice nie dizała do końca tak jak bym tego chciał.

Opisze jeszcze raz problem.

Mam

  1. tablice = array([2] =>10, [4] =>10, [1] =>10, [8] =>10, [9] =>10);


Chciałbym odczytać tylko elementy 3 i 5 czyli:

  1. [1] => 10 oraz [8] => 10


bez żadnych forów połączonych z ifami

Mam nadzieje że teraz jest bardziej zrozumiałe
darko
Ale w czym problem?
  1. $tablice = array(2 => 10, 4 =>10, 1 => 10, 8 =>10, 9 => 10);
  2. //print_r(array_slice($tablice, 2, 1, true));
  3. //print_r(array_slice($tablice, 3, 1, true));
  4.  
  5. function getArrayElementsByIndexes($array, array $indexes) {
  6. $return = array();
  7. foreach($indexes as $i) {
  8. $return[] = array_slice($array, $i, 1, true);
  9. }
  10. foreach($return as $k => $v) {
  11. foreach($v as $a => $b) {
  12. $temp[$a] = $b;
  13. }
  14. }
  15. return $temp;
  16. }
  17. print_r(getArrayElementsByIndexes($tablice, array(2,3)));
  18. // wynik
  19. // Array ( [1] => 10 [8] => 10 )
kask18
Chodziło mi o proste rozwiązanie bez forów ifów itp. Będzie przeglądana duża tablica, a operacja przeszukiwania ma działać szybko. Dzięki za chęć pomocy
darko
Do przeszukiwania tablic (w poszukiwaniu kluczy) służy funkcja array_search, której podajesz szukaną wartość, a funkcja ta zwróci - jeśli znajdzie - pasujący klucz. Natomiast znaleźć wartość skojarzoną z danym kluczem po wartości klucza chyba umie każdy. Poza tym nie wiem dlaczego tak się upierasz, żeby nie korzystać z foreach, pętli czy wbudowanych funkcji.
phpion
Może nie do końca elegancko z tym 3-krotnym wywołaniem next() no ale możesz sobie to jakoś ładniej opakować (np. w fora):
  1. $arr = array(2 => 10, 4 => 10, 1 => 10, 8 => 10, 9 => 10);
  2.  
  3. while (current($arr)) {
  4. echo key($arr).' '.current($arr).'<br>';
  5.  
  6. next($arr);
  7. next($arr);
  8. next($arr);
  9. }
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.