Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]większy przeskok foreach
kask18
post 16.04.2010, 11:44:20
Post #1





Grupa: Zarejestrowani
Postów: 121
Pomógł: 0
Dołączył: 3.12.2008

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


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.
Go to the top of the page
+Quote Post
phpion
post 16.04.2010, 11:46:55
Post #2





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




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++).
Go to the top of the page
+Quote Post
VGT
post 16.04.2010, 11:50:42
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 9
Dołączył: 19.11.2004
Skąd: Iława

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


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. }
Go to the top of the page
+Quote Post
kask18
post 16.04.2010, 12:01:28
Post #4





Grupa: Zarejestrowani
Postów: 121
Pomógł: 0
Dołączył: 3.12.2008

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


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
Go to the top of the page
+Quote Post
darko
post 16.04.2010, 12:06:54
Post #5





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

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


Zapoznaj się z funkcją array_slice, albo opisz dokładniej swój problem.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
kask18
post 16.04.2010, 12:24:25
Post #6





Grupa: Zarejestrowani
Postów: 121
Pomógł: 0
Dołączył: 3.12.2008

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


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

Ten post edytował kask18 16.04.2010, 12:25:46
Go to the top of the page
+Quote Post
darko
post 16.04.2010, 12:38:15
Post #7





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

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


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 )


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
kask18
post 16.04.2010, 12:43:20
Post #8





Grupa: Zarejestrowani
Postów: 121
Pomógł: 0
Dołączył: 3.12.2008

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


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
Go to the top of the page
+Quote Post
darko
post 16.04.2010, 12:47:54
Post #9





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

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


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.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
phpion
post 16.04.2010, 13:01:20
Post #10





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




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. }
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: 12.06.2025 - 19:46