הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   בעיה ברקורסיה (https://hosts.co.il/forums/showthread.php?t=49088)

DCB 06-07-07 07:11

בעיה ברקורסיה
 
או קי העניין הוא כזה....
PHP קוד:

function getContent($pid=0$level=0){ 
    
$query mysql_query("SELECT  id,  pid,  title  FROM  content  WHERE  pid  =  '$pid'"); 
    while (
$sql mysql_fetch_array($query)){ 
        echo  
$level." - ".$sql['title']."<br />";
        
getContent($sql['id'], $level++); 
    } 
}
getContent(); 

הפלט שיוצא לי הוא:
קוד:

0 - main
0 - main_sub_1
1 - main_sub_2
1 - second page
1 - second page sub 1
2 - second page sub 2
2 - sub sub 1
3 - sub sub 2
3 - second page sub 3
2 - third page
2 - third page sub 1
3 - third page sub 2

הוא מסדר את התוכן כמו שאני רוצה מבחינת סדר...
הבעיה שלי היא הlevel

זה מה שאני מחפש שיצא:
קוד:

0 - main
  1 - main_sub_1
  1 - main_sub_2
0 - second page
  1 - second page sub 1
  1 - second page sub 2
    2 - sub sub 1
    2 - sub sub 2
  1 - second page sub 3
0 - third page
  1 - third page sub 1
  1 - third page sub 2

מישהוא רואה פה את מה שאני מפספס?
תודה מראש

DorWD 06-07-07 07:54

אתה לא מפספס כלום :).
מה שאתה צריך לעשות זה דיב, עם text-indent, ושהlevel יהיה מספר הtext-indent.
ככה שכל פעם שהlevel גודל, כך גם הtext-indent

אז בקצרה מה שתצטרך לעשות זה כך:
PHP קוד:

function getContent($pid=0$level=0){ 
    
$query mysql_query("SELECT  id,  pid,  title  FROM  content  WHERE  pid  =  '$pid'"); 
    while (
$sql mysql_fetch_array($query)){ 
        echo  
"<div style=\"text-indent: ".$level 10."px;\">".$level." - ".$sql['title']."</div><br />";
        
getContent($sql['id'], $level++); 
    } 
}
getContent(); 

בהצלחה :)

DCB 06-07-07 08:19

לא....
מה שעכשיו יש בפלט אם שמת לב זה הlevel ותראה מה קורה שם...
כמובן שאחר-כך אני יוכל לשחק עם הlevel והpadding אבל הבעיה שלי היא שהlevel לא יוצא בסדר נכון...

תסתכל שוב על שני הפלטים שיוצאים לי
ותודה על העזרה

Elad-A 06-07-07 08:21

בשביל לבדוק את זה תעשה str_repeat לפי המשתנה $i זה יסדר לך.

חיים 06-07-07 08:26

אםם אולי תנסה לשנות את השורה הזאת:
PHP קוד:

getContent($sql['id'], $level++); 

לשורה הזאת
PHP קוד:

getContent($pid++, $level++); 


DCB 06-07-07 08:33

ציטוט:

נכתב במקור על ידי Elad-A (פרסם 515063)
בשביל לבדוק את זה תעשה str_repeat לפי המשתנה $i זה יסדר לך.

איזה $i אין לי משתנה כזה בכל הרקורסיה או הלולאה בכלל...


ציטוט:

נכתב במקור על ידי masterpl (פרסם 515065)
אםם אולי תנסה לשנות את השורה הזאת:
PHP קוד:

getContent($sql['id'], $level++); 

לשורה הזאת
PHP קוד:

getContent($pid++, $level++); 


לא רואה איך זה עוזר, סתם מכניס את הרקורסיה ללואה אין סופית ומפיל לי את הhttp

Elad-A 06-07-07 08:35

PHP קוד:

echo  str_repeat("-" $level) . $sql['title']."<br />"

משהו כזה

DCB 06-07-07 08:41

ציטוט:

נכתב במקור על ידי Elad-A (פרסם 515068)
PHP קוד:

echo  str_repeat("-" $level) . $sql['title']."<br />"

משהו כזה

לא עזר...
תקרא שוב את השאלה שלי ותסתכל על הפלט שאני מקבל ומה שאני מנסה לקבל...
מה שנתת לי סתם מחליף את המספר ברווחים וזאת לא הבעיה שלי

Eran-s 06-07-07 15:59

תעשה טובה תרשום את הקוד מחדש.
אני יכול לעזור לך לתקן אותו אבל לא טוב לך פה,
אתה יכול לעשות הכל בשאילתה אחת מה אתה מסתבך, במקום שוב ושוב לזמן אותה.
תקרא על JOIN.

4ior 06-07-07 16:27

PHP קוד:

function getContent($pid=0$level=0){ 
    
$query mysql_query("SELECT  id,  pid,  title  FROM  content  WHERE  pid  =  '$pid'"); 
    while (
$sql mysql_fetch_array($query)){ 
 echo 
str_repeat(" " $level);  
        echo  
$level." - ".$sql['title']."<br />";
        
getContent($sql['id'], $level++); 
    } 
}
getContent(); 

אחי, אלעד נתן לך בדיוק מה שצריך. תחשוב קצת ותשנה את ה"-" ל-" "..

Rom 06-07-07 16:42

הבנתי מה הבעיה שלך..
PHP קוד:

function getContent($pid=0$level=0){ 
    
$query mysql_query("SELECT  id,  pid,  title  FROM  content  WHERE  pid  =  '$pid'"); 
    while (
$sql mysql_fetch_array($query)){ 
        echo  
$level." - ".$sql['title']."<br />";
    
$newLevel $level 1;
        
getContent($sql['id'], $newLevel); 
    } 
}
getContent(); 


DCB 06-07-07 19:23

ציטוט:

נכתב במקור על ידי Rom (פרסם 515432)
הבנתי מה הבעיה שלך..
PHP קוד:

function getContent($pid=0$level=0){ 
    
$query mysql_query("SELECT  id,  pid,  title  FROM  content  WHERE  pid  =  '$pid'"); 
    while (
$sql mysql_fetch_array($query)){ 
        echo  
$level." - ".$sql['title']."<br />";
    
$newLevel $level 1;
        
getContent($sql['id'], $newLevel); 
    } 
}
getContent(); 


אחח תודה לאל! סוף סוף
תוכל להגיד לי מה בדיוק הייתה הבעיה כי לא כל כך הבנתי...

וערן אתה צודק אני פשוט ישלוף את כל הרשומות למערך ואז אני יסדר את זה כבר...

Eran-s 06-07-07 19:31

ציטוט:

נכתב במקור על ידי DCB (פרסם 515537)
אחח תודה לאל! סוף סוף
תוכל להגיד לי מה בדיוק הייתה הבעיה כי לא כל כך הבנתי...

וערן אתה צודק אני פשוט ישלוף את כל הרשומות למערך ואז אני יסדר את זה כבר...

לא חייב מערך ולא חייב רקורסיה בכלל..
תשלוף עם JOIN.

4ior 06-07-07 19:40

ציטוט:

נכתב במקור על ידי DCB (פרסם 515537)
אחח תודה לאל! סוף סוף
תוכל להגיד לי מה בדיוק הייתה הבעיה כי לא כל כך הבנתי...

וערן אתה צודק אני פשוט ישלוף את כל הרשומות למערך ואז אני יסדר את זה כבר...

PHP קוד:

$level++; 

מקדם את זה אחרי שהוא קורא לפונקציה.
אם היית שם
PHP קוד:

++$level

זה גם היה עובד.

DCB 06-07-07 21:11

ציטוט:

נכתב במקור על ידי Eran-s (פרסם 515541)
לא חייב מערך ולא חייב רקורסיה בכלל..
תשלוף עם JOIN.

הכיצד משתמשים בJOIN ערנוש? :)
אף פעם לא שמעתי על זה :\

Eran-s 06-07-07 21:51

רשמו מלא דוגמאות בעבר פה, זה לא בעיה ממש.

DCB 06-07-07 23:23

אוקי אני יחפש קצת...

תודה רבה על העזרה של כולם אני מניח שאפשר לנעול כי הבעיה שלי נפתרה :)


כל הזמנים הם GMT +2. הזמן כעת הוא 11:52.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ