Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Itelator .Dlaczego w trakcie pętli foreach pobiera akurat dane z pola o nazwie array?
anonim1989
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.01.2011

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


Itelator .Dlaczego w trakcie pętli foreach pobiera akurat dane z pola o nazwie $array? a nie z innej? czy można zrobić tak by pobierał z innego pola? mam tu przykład:
  1. <?php
  2. class myIterator implements Iterator {
  3. private $position = 0;
  4. public $array = array(
  5. "firstelement",
  6. "secondelement",
  7. "lastelement",
  8. );
  9. public $dane = array(
  10. "kowalski",
  11. "stypkiewicz",
  12. "nowicki",
  13. );
  14.  
  15. public function __construct() {
  16. var_dump(__METHOD__);
  17. $this->position = 0;
  18. }
  19.  
  20. function rewind() {
  21. var_dump(__METHOD__);
  22. $this->position = 0;
  23. }
  24.  
  25. function current() {
  26. var_dump(__METHOD__);
  27. return $this->array[$this->position];
  28. }
  29.  
  30. function key() {
  31. var_dump(__METHOD__);
  32. return $this->position;
  33. }
  34.  
  35. function next() {
  36. var_dump(__METHOD__);
  37. ++$this->position;
  38. }
  39.  
  40. function valid() {
  41. var_dump(__METHOD__);
  42. return isset($this->array[$this->position]);
  43. }
  44. }
  45.  
  46. $it = new myIterator;
  47.  
  48. foreach($it as $key => $value) {
  49. var_dump($key);
  50. var_dump($value);
  51.  
  52. }
  53.  
  54. ?>


Gdy wykonuje pętle pobiera dane z $array.Jak zrobić by pobierał dane w czasie foreach z tablicy $dane;

Ten post edytował anonim1989 8.01.2011, 10:50:43
Go to the top of the page
+Quote Post
Noidea
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Zwraca z tablicy $array, bo tak jej kazałeś. Zerknij na funkcje current() i valid().

Dodatkowo masz błąd w next(). Ona oprócz zwiększania licznika o 1 powinna również zwracać aktualny element. Dopisz do niej na końcu:
return $this->current();

@Crozin: faktycznie, musiała mnie zmylić funkcja next

Ten post edytował Noidea 8.01.2011, 22:35:52


--------------------
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


@up

Jak dla mnie wystarczy dopisać return przed ++

Ten post edytował fifi209 8.01.2011, 17:30:28


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@Noidea: Iterator::next() nie zwraca niczego: http://pl.php.net/manual/en/iterator.next.php
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 Aktualny czas: 20.08.2025 - 16:45