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

הוסטס - פורום אחסון האתרים הגדול בישראל (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(); 

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


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

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