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:
function d($id, $result) {
include("inc/config.php");
$main_section_query = mysqli_query($connection, "SELECT id, sub, nazwa, kategoria FROM dzialy WHERE id='$id'");
if(mysqli_num_rows($main_section_query) > 0) {
while($main_section = mysqli_fetch_array($main_section_query)) {
$sub_section_query = mysqli_query($connection, "SELECT id FROM dzialy WHERE id='$main_section[sub]'");
if(mysqli_num_rows($sub_section_query) > 0) {
while($sub_section = mysqli_fetch_array($sub_section_query)) {
d($sub_section['id'], $result);
}
} else {
switch($result) {
case 1
: echo $main_section['id']; break; case 2
: echo $main_section['nazwa']; break; case 3
: echo $main_section['kategoria']; break; case 4
: $section_category = mysqli_fetch_array
(mysqli_query
($connection, "SELECT nazwa FROM kategorie WHERE id='$main_section[kategoria]'")); echo $section_category['nazwa']; break; }
}
if($result == 0) {
echo'<hr><a href="?d='.$main_section['id'].'">'.$main_section['nazwa'].'</a>'; }
}
}
}
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:
...
}
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):
function d($id, $result) {
include("inc/config.php");
$main_section_query = mysqli_query($connection, "SELECT id, sub, nazwa, kategoria FROM dzialy WHERE id='$id'");
if(mysqli_num_rows($main_section_query) > 0) {
while($main_section = mysqli_fetch_array($main_section_query)) {
if($result == 5) {
if(file_exists('img/section/section_bg/'.$main_section['id'].'.jpg')) { echo'<style>body { background-image: url(img/section/section_bg/'.$main_section['id'].'.jpg); }</style>'; break;
}
}
$sub_section_query = mysqli_query($connection, "SELECT id FROM dzialy WHERE id='$main_section[sub]'");
if(mysqli_num_rows($sub_section_query) > 0) {
while($sub_section = mysqli_fetch_array($sub_section_query)) {
d($sub_section['id'], $result);
}
} else {
switch($result) {
case 1
: echo $main_section['id']; break; case 2
: echo $main_section['nazwa']; break; case 3
: echo $main_section['kategoria']; break; case 4
: $section_category = mysqli_fetch_array
(mysqli_query
($connection, "SELECT nazwa FROM kategorie WHERE id='$main_section[kategoria]'")); echo $section_category['nazwa']; break; }
if($result == 5) {
if(file_exists('img/section/category_bg/'.$main_section['kategoria'].'.jpg')) { echo'<style>body { background-image: url(img/section/category_bg/'.$main_section['kategoria'].'.jpg); }</style>'; }
}
}
if($result == 0) {
echo'<hr><a href="?d='.$main_section['id'].'">'.$main_section['nazwa'].'</a>'; }
}
}
}
Dziękuję z góry i Pozdrawiam!
Ten post edytował Xeer 1.05.2017, 16:02:23