Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zapętlenie funkcji
Forum PHP.pl > Forum > Przedszkole
PawelC
Witam smile.gif
Nawiązuje do tego tematu http://forumphp.nq.pl/php_Blad_redeclare_t92226.html, używam tego skryptu z niego, i chciałbym się dowiedzieć jak zrobić aby wykonać czynność kilka razy przy użyciu tej funkcji jak wrzucę ją do pętli to wywala ten błąd z redeclare?
webdice
W pętli nie definiujesz funkcji tylko ją wykonujesz, np.:

  1. <?php
  2. while (...)
  3. {
  4. print someFunction (arguments);
  5. }
  6. ?>
pyro
Jeżeli chcesz koniecznie w petli zadeklarowac funkcje to mozesz to zrobic w ten sposob:

  1. <?php
  2.  
  3. for($i = 0; $i <= 10; $i++)
  4. {
  5.  
  6. if(!function_exists('moja_funkcja'))
  7. {
  8. function moja_funkcja()
  9. {
  10. // tutaj cos co ma robic ta funkcja, zostanie ona zadeklarowana tylko raz i mozna 
    jej uzyc wewnatrz petli
  11. }
  12. }
  13. // ... cos co ma dalej robic petla
  14. }
  15.  
  16. ?>
PawelC
teraz wykonuje się dobrze, tylko zamiast wyrazu co kilka zdań wstawia mi array. A dokładnie robie tak osobno pobieram nazwy do utworzenia podstron i osobno do wstawienia aktualnego wyrazu w funkcji putWord efekt jest taki ze w każdej utworzonej podstronie wstawia cały czas to samo słowo zamiast kolejne.
pyro
moze skopiuj skrypt jaki dostychczas napisales...?
PawelC
Tworzy normalnie podstrony z takimi nazwami jak chcę ale w tekscie zamiast wstawić co pare zdań keyword to we wszystkich wstawia ten sam.
  1. <?php
  2. function putWord($matches)
  3. {
  4. static $counter;
  5.  
  6. $matches = $matches[0];
  7. $counter++;
  8. $tablicaa = file("slowa.txt");
  9. foreach($tablicaa as $key => $wyraz){
  10. return (!($counter%2))?$matches." <strong>$wyraz</strong> ":$matches;
  11. }
  12. }
  13.  
  14. $tablica = file("slowa.txt");
  15. foreach($tablica as $key => $wyraz){
  16. print putWord($matches);
  17. $test=$_POST['test'];
  18. $tresc=explode('.',$test);
  19.  
  20. $wynik = str_replace(' ', '-',$wyraz);
  21.  
  22. print putWord($matches);
  23. $tablica = $tresc;
  24. shuffle($tablica);
  25.  
  26. echo $wylosowana_zmienna = implode('.', $tablica);
  27.  
  28.  
  29.  
  30. $wynik = str_replace(' ', '-',$wyraz);
  31.  
  32. $wyrazek=trim($wyraz);
  33.  
  34.  
  35.  
  36.  
  37. $text =$wylosowana_zmienna;
  38.  
  39.  
  40. $text = preg_replace_callback("#.#", "putWord", $text);
  41.  
  42. $tresc="
  43. $text
  44. ";
  45.  
  46.  
  47. $uchwyt = fopen(trim($wynik) .".html", 'w');
  48. fwrite($uchwyt, $tresc);
  49. fclose($uchwyt);
  50.  
  51. }
  52.  
  53.  
  54. ?>

A ten kod:
  1. <?php
  2. $tablicaa = file("slowa.txt");
  3. foreach($tablicaa as $key => $wyraz){
  4. return (!($counter%2))?$matches." <strong>$wyraz</strong> ":$matches;
  5. }
  6. ?>

Jest odpowiedzialny za nowy keyword w nowej podstronie, a cały czas jest tak jakby był jeden.
erix
Cytat
  1. <?php
  2. foreach($tablicaa as $key => $wyraz){
  3. return (!($counter%2))?$matches." <strong>$wyraz</strong> ":$matches;
  4. }
  5. ?>


Przecież jak masz return, to nie ma prawa zwrócić więcej niż jednego elementu (return przerywa przecież funkcję w miejscu wystąpienia).
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.