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

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

Elad-A 08-06-07 14:40

[PHP] צריך עזרה ברקורסיה
 
שלום,
עשתי את הקוד הבא:

PHP קוד:

function GetCat($catp 0)
{
    
$query mysql_query("SELECT * FROM cat WHERE catp = '" $catp "' ");
    
$i 0;
    
    while(
$info mysql_fetch_array($query))
    {
        if(
$info['catp'])
        {
            
$i++;
        }

        echo 
str_repeat('>' $i) . " " $info['catname'] . "<br />";
        
GetCat($info['catid']);
    }
}

GetCat(0); 

הכל עובד טוב (כמעט)
במקום שזה יצא ככה:

קטגוריה 1
> תת קטגוריה ל 1
>> תת בתת קטגוריה 1
קטגוריה 2
> תת קטגוריה ל 2
>> תת בתת קטגוריה 2

זה יוצא ככה:

קטגוריה 1
> תת קטגוריה ל 1
> תת בתת קטגוריה 1
קטגוריה 2
> תת קטגוריה ל 2
> תת בתת קטגוריה 2

שימו לב שיש בעיה בתת קטגוריה השניה
אשמח לעזרה :)

Eran-s 08-06-07 15:04

אתה צריך להתחיל את $i ב-1.
כי אתה לוקח את הקטגוריה הראשית ($i נשאר 0) אז לא מציג את התו.

Elad-A 08-06-07 15:18

אבל זה עדיין לא עובד..

X-T 08-06-07 16:33

בשביל מה אתה מצהיר על CATP כ 0? הרי גם ככה כשאתה קורא לפונקציה זה מגדיר אותה, למרות שזה לא יפתור לך את הבעיה.

Elad-A 08-06-07 16:49

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

עריכה:
כנראה שלא הסתדרתי חח..
הקוד:
PHP קוד:

function GetCat($catp $q 0)
{
    
$query mysql_query("SELECT * FROM cat WHERE catp = '" $catp "' ");
    
$i 0;
    
    while(
$info mysql_fetch_array($query))
    {
        if(
$info['catp'])
        {
            
$i++;
        }

        echo 
str_repeat('>' $q) . " " $info['catname'] . "<br />";
        
GetCat($info['catid'] , $i 1);
    }
}

GetCat(0); 

קוד מסודר יש לי אה? :)

Eran-s 08-06-07 22:26

ניסית בכלל את מה שאמרתי? תרשום $i = 1; במקום 0

4ior 08-06-07 22:42

כנראה שאחרי שהוספת את הq שכחת לתקן...
קוד מתוקן:

PHP קוד:

function GetCat($catp $q 0)
{
    
$query mysql_query("SELECT * FROM cat WHERE catp = '" $catp "' ");    
    while(
$info mysql_fetch_array($query))
 {
        echo 
str_repeat('>' $q) . " " $info['catname'] . "<br />";
        
GetCat($info['catid'] , $q 1);
    }
}

GetCat(0); 


Elad-A 09-06-07 20:43

תודה רבה ליאור :)

בניה 09-06-07 21:13

PHP קוד:

function GetCat($catp 0$level 0)
{
    
$query mysql_query("SELECT * FROM cat WHERE catp = '" $catp "' ");
    if(
mysql_num_rows($query) == 0)
    {
         return 
0;
    }
    
$i 0;
    
$level++;
    while(
$info mysql_fetch_assoc($query))
    {
        echo 
str_repeat('>' $level) . " " $info['catname'] . "<br />";
        
GetCat($info['catid'], $level);
    }



BlueNosE 10-06-07 07:21

גם אם זה פועל זה לא יעיל..
יש לך שאילתא על כל פעם שהרקורסיה נקראת, נסה להשתמש במערך כללי..


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

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