Witam.

Mam pewien problem z drzewkiem rekurencyjnym w PHP.

Funkcja która wykonuje się w funkcji musi mi dać odpowiedź w formie return'a czego nie potrafię zrobić próbując już na wiele sposobów od podawania return przy funkcji w funkcji po inne dziwne wymysły.

W czym dokładnie problem?
Potrzebuję porównać file_exists z wynikiem działania funkcji, gdyby to była zwykła funkcja to po prostu dałbym return i otrzymałbym to czego potrzebuję, problem jest jednak gdy wykonuje się ona w sobie więcej niż jeden raz bo wtedy tego returna z głównej funkcji nie otrzymuję - problemu nie ma gdy potrzebuję to wyechować.

Co prawda mógłbym to zrobić w tej funkcji sprawdzając za każdym razem ten file_exists i byłoby po problemie, lecz zaciekawiło mnie czy da się w ogóle w jakiś sposób przekazać pierwszej wykonanej funkcji wynik ostatniej wykonanej funkcji.

Przepraszam, że tak niezwięźle wytłumaczyłem, lecz lepiej nie potrafię.

Tutaj funkcja o której mowa:
  1. function d($id, $result) {
  2. include("inc/config.php");
  3. $main_section_query = mysqli_query($connection, "SELECT id, sub, nazwa, kategoria FROM dzialy WHERE id='$id'");
  4.  
  5. if(mysqli_num_rows($main_section_query) > 0) {
  6. while($main_section = mysqli_fetch_array($main_section_query)) {
  7. $sub_section_query = mysqli_query($connection, "SELECT id FROM dzialy WHERE id='$main_section[sub]'");
  8. if(mysqli_num_rows($sub_section_query) > 0) {
  9. while($sub_section = mysqli_fetch_array($sub_section_query)) {
  10. d($sub_section['id'], $result);
  11. }
  12. } else {
  13. switch($result) {
  14. case 1: echo $main_section['id']; break;
  15. case 2: echo $main_section['nazwa']; break;
  16. case 3: echo $main_section['kategoria']; break;
  17. case 4: $section_category = mysqli_fetch_array(mysqli_query($connection, "SELECT nazwa FROM kategorie WHERE id='$main_section[kategoria]'")); echo $section_category['nazwa']; break;
  18. }
  19. }
  20. if($result == 0) {
  21. echo'<hr><a href="?d='.$main_section['id'].'">'.$main_section['nazwa'].'</a>';
  22. }
  23. }
  24. }
  25. }


Gdyby się dało jakoś otrzymać ten return w głównej funkcji to życie byłoby dużo prostsze i o wiele lepszy kod - dlatego postanowiłem zapytać na tym forum czy jest to jakoś wykonalne.

Natomiast jeżeli chodzi o to co chcę sprawdzić to chcę to zrobić w taki sposób:

  1. if(file_exists('img/'.$d($id, 3).'.jpg')) {
  2. ...
  3. }


Lecz z echem niestety jest to awykonalne.

Natomiast bez zewnętrznego użycia return'a z tej funkcji, w jej środku wymyśliłem to w taki sposób (result nr. 5):
  1. function d($id, $result) {
  2. include("inc/config.php");
  3.  
  4. $main_section_query = mysqli_query($connection, "SELECT id, sub, nazwa, kategoria FROM dzialy WHERE id='$id'");
  5. if(mysqli_num_rows($main_section_query) > 0) {
  6. while($main_section = mysqli_fetch_array($main_section_query)) {
  7. if($result == 5) {
  8. if(file_exists('img/section/section_bg/'.$main_section['id'].'.jpg')) {
  9. echo'<style>body { background-image: url(img/section/section_bg/'.$main_section['id'].'.jpg); }</style>';
  10. break;
  11. }
  12. }
  13.  
  14. $sub_section_query = mysqli_query($connection, "SELECT id FROM dzialy WHERE id='$main_section[sub]'");
  15. if(mysqli_num_rows($sub_section_query) > 0) {
  16. while($sub_section = mysqli_fetch_array($sub_section_query)) {
  17. d($sub_section['id'], $result);
  18. }
  19. } else {
  20. switch($result) {
  21. case 1: echo $main_section['id']; break;
  22. case 2: echo $main_section['nazwa']; break;
  23. case 3: echo $main_section['kategoria']; break;
  24. case 4: $section_category = mysqli_fetch_array(mysqli_query($connection, "SELECT nazwa FROM kategorie WHERE id='$main_section[kategoria]'")); echo $section_category['nazwa']; break;
  25. }
  26.  
  27. if($result == 5) {
  28. if(file_exists('img/section/category_bg/'.$main_section['kategoria'].'.jpg')) {
  29. echo'<style>body { background-image: url(img/section/category_bg/'.$main_section['kategoria'].'.jpg); }</style>';
  30. }
  31. }
  32. }
  33. if($result == 0) {
  34. echo'<hr><a href="?d='.$main_section['id'].'">'.$main_section['nazwa'].'</a>';
  35. }
  36. }
  37. }
  38. }


Dziękuję z góry i Pozdrawiam!