Avatar billede bigo Nybegynder
28. december 2007 - 10:44 Der er 1 kommentar og
1 løsning

lav album liste

Hejsa.

Jeg har en album liste i db som er ala: a_id, a_level hvor a_id er autoinc. og a_level er id på det album som det aktuelle album tilhører (parent til child)

jeg vil gerne lave en liste som finder albums. Og de albums som har children.

Så jeg f.eks. får en liste ala:
(efter albumnavnet angiver jeg nu a_id, a_level)

Albums:
Fodbold (1,0)
-Afslutning (2,1)
-Turen 2007 (3,1)
Sverige (4,0)
-Bjuv (5,4)
-Gøteborg (6,4)
-Stockholm (7,4)

Jeg har lavet to små funktioner der rekursivt henter skidtet men den laver et mellemrum (tomt array) når den finder at der er children til en parent.

Resultat:
Albums:
Fodbold (1,0)

-Afslutning (2,1)
-Turen 2007 (3,1)
Sverige (4,0)

-Bjuv (5,4)
-Gøteborg (6,4)
-Stockholm (7,4)



Code:
function get_album_list($a=0)
{
    $sql = "SELECT MAX(a_id) FROM g3_albums";
    $res = mysql_query($sql);
    $max_a_id = mysql_fetch_assoc($res);

    if ($_SESSION[status] == 3)
        $sql = "
        SELECT * FROM g3_albums
        WHERE a_level=$a
        ORDER BY a_id, a_level ASC
        ";
    else
        $sql = "
        SELECT * FROM g3_albums
        WHERE u_id = '".$_SESSION[u_id]."'
        AND a_level=$a
        ORDER BY a_id, a_level ASC
        ";
    $res = mysql_query($sql);
    $num_rows = mysql_num_rows($res);
    if ($num_rows == 0)
        return;
       
    while ($row = mysql_fetch_assoc($res))
    {
        // We have reached the end of the list
        if ($row[a_id] == $max_a_id[a_id])
            break;
       
        $alb_array[$row[a_id]] = array ("a_id" => $row[a_id], "a_name" => $row[a_name], "a_level" => $row[a_level]);
        $alb_array[$row[a_id]][] = get_album_list($row[a_id]);
       
    } // end while row
    return $alb_array;
   
} // end function get_album_list


function create_album_list($alb_arrays, $x=0)
{
    foreach($alb_arrays AS $alb_array)
    {
        if (is_array($alb_array))
        {
            if($alb_array[a_level] > 0) $x++;
            $tegn = str_repeat("-", $x);
            echo "<option value='$alb_array[a_id]' ".(($a == $alb_array[a_id]) ? " selected" : "").">".(($alb_array[a_level] > 0) ? $tegn : "")."$alb_array[a_name]";
                create_album_list($alb_array, $x);
            if($alb_array[a_level] > 0) $x--;

        }
    } // end foreach alb_arrays
} // end function create_album_list

Er der nogen der kan se hvorfor den gør det og evt. hvordan jeg stopper den med det.

Det aktuelle array er her: (resultat af get_album_list)

array(5) {
  [1]=>
  array(4) {
    ["a_id"]=>
    string(1) "1"
    ["a_name"]=>
    string(7) "Bitches"
    ["a_level"]=>
    string(1) "0"
    [0]=>
    array(2) {
      [4]=>
      array(4) {
        ["a_id"]=>
        string(1) "4"
        ["a_name"]=>
        string(9) "blackpics"
        ["a_level"]=>
        string(1) "1"
        [0]=>
        NULL
      }
      [13]=>
      array(4) {
        ["a_id"]=>
        string(2) "13"
        ["a_name"]=>
        string(10) "WallPapers"
        ["a_level"]=>
        string(1) "1"
        [0]=>
        NULL
      }
    }
  }
  [2]=>
  array(4) {
    ["a_id"]=>
    string(1) "2"
    ["a_name"]=>
    string(5) "Cross"
    ["a_level"]=>
    string(1) "0"
    [0]=>
    array(1) {
      [10]=>
      array(4) {
        ["a_id"]=>
        string(2) "10"
        ["a_name"]=>
        string(5) "Anton"
        ["a_level"]=>
        string(1) "2"
        [0]=>
        NULL
      }
    }
  }
  [25]=>
  array(4) {
    ["a_id"]=>
    string(2) "25"
    ["a_name"]=>
    string(5) "Trane"
    ["a_level"]=>
    string(1) "0"
    [0]=>
    array(5) {
      [31]=>
      array(4) {
        ["a_id"]=>
        string(2) "31"
        ["a_name"]=>
        string(8) "div junk"
        ["a_level"]=>
        string(2) "25"
        [0]=>
        NULL
      }
      [33]=>
      array(4) {
        ["a_id"]=>
        string(2) "33"
        ["a_name"]=>
        string(3) "bbq"
        ["a_level"]=>
        string(2) "25"
        [0]=>
        NULL
      }
      [36]=>
      array(4) {
        ["a_id"]=>
        string(2) "36"
        ["a_name"]=>
        string(11) "Tanegashima"
        ["a_level"]=>
        string(2) "25"
        [0]=>
        NULL
      }
      [38]=>
      array(4) {
        ["a_id"]=>
        string(2) "38"
        ["a_name"]=>
        string(10) "Mt. Ontake"
        ["a_level"]=>
        string(2) "25"
        [0]=>
        NULL
      }
      [72]=>
      array(4) {
        ["a_id"]=>
        string(2) "72"
        ["a_name"]=>
        string(5) "Nepal"
        ["a_level"]=>
        string(2) "25"
        [0]=>
        array(3) {
          [73]=>
          array(4) {
            ["a_id"]=>
            string(2) "73"
            ["a_name"]=>
            string(7) "everest"
            ["a_level"]=>
            string(2) "72"
            [0]=>
            NULL
          }
          [74]=>
          array(4) {
            ["a_id"]=>
            string(2) "74"
            ["a_name"]=>
            string(9) "Annapurna"
            ["a_level"]=>
            string(2) "72"
            [0]=>
            NULL
          }
          [75]=>
          array(4) {
            ["a_id"]=>
            string(2) "75"
            ["a_name"]=>
            string(15) "Nepal and India"
            ["a_level"]=>
            string(2) "72"
            [0]=>
            NULL
          }
        }
      }
    }
  }
  [26]=>
  array(4) {
    ["a_id"]=>
    string(2) "26"
    ["a_name"]=>
    string(15) "Lars´s Billeder"
    ["a_level"]=>
    string(1) "0"
    [0]=>
    array(16) {
      [12]=>
      array(4) {
        ["a_id"]=>
        string(2) "12"
        ["a_name"]=>
        string(9) "AcidSpunk"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [14]=>
      array(4) {
        ["a_id"]=>
        string(2) "14"
        ["a_name"]=>
        string(9) "GriseFest"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [23]=>
      array(4) {
        ["a_id"]=>
        string(2) "23"
        ["a_name"]=>
        string(14) "Træf på Toppen"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [24]=>
      array(4) {
        ["a_id"]=>
        string(2) "24"
        ["a_name"]=>
        string(8) "SunnyDay"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [29]=>
      array(4) {
        ["a_id"]=>
        string(2) "29"
        ["a_name"]=>
        string(7) "Gedesby"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [52]=>
      array(4) {
        ["a_id"]=>
        string(2) "52"
        ["a_name"]=>
        string(19) "Luxembourg_oct_2006"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [56]=>
      array(4) {
        ["a_id"]=>
        string(2) "56"
        ["a_name"]=>
        string(11) "Brovst_2007"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [58]=>
      array(4) {
        ["a_id"]=>
        string(2) "58"
        ["a_name"]=>
        string(7) "diverse"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [59]=>
      array(4) {
        ["a_id"]=>
        string(2) "59"
        ["a_name"]=>
        string(31) "Frederiksberg Have 2006 Efterår"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [62]=>
      array(4) {
        ["a_id"]=>
        string(2) "62"
        ["a_name"]=>
        string(16) "HLS - Pinse 2007"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [63]=>
      array(4) {
        ["a_id"]=>
        string(2) "63"
        ["a_name"]=>
        string(10) "Lejre-2007"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [64]=>
      array(4) {
        ["a_id"]=>
        string(2) "64"
        ["a_name"]=>
        string(8) "Kronborg"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [65]=>
      array(4) {
        ["a_id"]=>
        string(2) "65"
        ["a_name"]=>
        string(19) "Smuttur til Holland"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [67]=>
      array(4) {
        ["a_id"]=>
        string(2) "67"
        ["a_name"]=>
        string(10) "Ferie 2007"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [70]=>
      array(4) {
        ["a_id"]=>
        string(2) "70"
        ["a_name"]=>
        string(12) "Sverigeturen"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        NULL
      }
      [76]=>
      array(4) {
        ["a_id"]=>
        string(2) "76"
        ["a_name"]=>
        string(7) "Fodbold"
        ["a_level"]=>
        string(2) "26"
        [0]=>
        array(2) {
          [32]=>
          array(4) {
            ["a_id"]=>
            string(2) "32"
            ["a_name"]=>
            string(15) "Fodbold Weekend"
            ["a_level"]=>
            string(2) "76"
            [0]=>
            NULL
          }
          [35]=>
          array(4) {
            ["a_id"]=>
            string(2) "35"
            ["a_name"]=>
            string(18) "Fodbold Afslutning"
            ["a_level"]=>
            string(2) "76"
            [0]=>
            NULL
          }
        }
      }
    }
  }
  [68]=>
  array(4) {
    ["a_id"]=>
    string(2) "68"
    ["a_name"]=>
    string(15) "Britts Billeder"
    ["a_level"]=>
    string(1) "0"
    [0]=>
    array(3) {
      [55]=>
      array(4) {
        ["a_id"]=>
        string(2) "55"
        ["a_name"]=>
        string(7) "Zoo2007"
        ["a_level"]=>
        string(2) "68"
        [0]=>
        NULL
      }
      [69]=>
      array(4) {
        ["a_id"]=>
        string(2) "69"
        ["a_name"]=>
        string(13) "Mallorca 2007"
        ["a_level"]=>
        string(2) "68"
        [0]=>
        NULL
      }
      [71]=>
      array(4) {
        ["a_id"]=>
        string(2) "71"
        ["a_name"]=>
        string(27) "Claus og Charlottes Bryllup"
        ["a_level"]=>
        string(2) "68"
        [0]=>
        NULL
      }
    }
  }
}
Avatar billede bigo Nybegynder
25. januar 2008 - 10:49 #1
fiksede med en lille rekursiv funktion eller 2
Avatar billede bigo Nybegynder
25. januar 2008 - 10:50 #2
function get_download_list($ID, $RecursionLevel=0)
{
    GLOBAL $u_id;
   
  if ($RecursionLevel > 10)
    return;

  static $Ting = array();
    if ($RecursionLevel == 0)
        $Ting[] = $ID;

    if ($_SESSION[status] == 3)
        $sql = "
        SELECT * FROM g3_albums
        WHERE a_level='$ID'
        ORDER BY a_id, a_level ASC
        ";
    else
        $sql = "
        SELECT * FROM g3_albums
        WHERE u_id = '$u_id'
        AND a_level='$ID'
        ORDER BY a_id, a_level ASC
        ";

  $STH = mysql_query($sql);

  while ($Row = mysql_fetch_assoc($STH))
  {
    $Ting[] = $Row["a_id"];
    get_download_list($Row["a_id"], $RecursionLevel + 1);
  }

  return $Ting;
}

function get_album_list($a=0, $RecursionLevel=0)
{
    GLOBAL $u_id;
   
    $sql = "SELECT MAX(a_id) FROM g3_albums";
    $res = mysql_query($sql);
    $max_a_id = mysql_fetch_assoc($res);

  if ($RecursionLevel > 10)
    return;

  static $alb_array = array();

    if ($_SESSION[status] == 3)
        $sql = "
        SELECT * FROM g3_albums
        WHERE a_level='$a'
        ORDER BY a_id, a_level ASC
        ";
    else
        $sql = "
        SELECT * FROM g3_albums
        WHERE u_id = '$u_id'
        AND a_level='$a'
        ORDER BY a_id, a_level ASC
        ";
    $res = mysql_query($sql);

    while ($row = mysql_fetch_assoc($res))
    {
        // We have reached the end of the list
        if ($row[a_id] == $max_a_id[a_id])
            break;

        $alb_array[] = array ("a_id" => $row[a_id], "a_name" => $row[a_name], "a_level" => $row[a_level]);
        get_album_list($row[a_id], $RecursionLevel + 1);
    } // end while row

    return $alb_array;

} // end function get_album_list


function create_album_list($alb_arrays, $x=0, $old_a_id)
{
    foreach($alb_arrays AS $alb_array)
    {
        if (is_array($alb_array))
        {
            if($alb_array[a_level] != $old_a_id)
            {
                $x++;
                $old_a_id = $alb_array[a_id];
            }
            $tegn = str_repeat("&nbsp;&nbsp;", $x)."-";
            echo "<option value='$alb_array[a_id]' ".(($a == $alb_array[a_id]) ? " selected" : "").">".(($alb_array[a_level] > 0) ? $tegn : chr(187))."$alb_array[a_name]";
            create_album_list($alb_array, $x, $old_a_id);
            if($alb_array[a_id] == $old_a_id)
                $x--;
        }
    } // end foreach alb_arrays
} // end function create_album_list
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester