Ben de basit bir fonksiyon göstereyim.
function kategoriler_listele($kategoriler,$parent = 0){
   $html = '<ul>';
   foreach($kategoriler as $kategori)
   {
     if($kategori['parent']==$parent){
       $html .= '<li>'.$kategori['ad'];
       $html .= menu_listele($kategoriler,$kategori['id']);
       $html .= '</li>';
     }
   }
   $html .= '</ul>';
   return $html;
}

$kategoriler = [
   [
      "id" => 1,
      "parent" => 0,
      "ad" => "Dersler"
   ],
   [
      "id" => 2,
      "parent" => 0,
      "ad" => "Güncel"
   ],
   [
       "id" => 3,
       "parent" => 0,
       "ad" => "Blog"
   ],
   [
      "id" => 4,
      "parent" => 1,
      "ad" => "Php Dersleri"
   ],
   [
      "id" => 5,
      "parent" => 1,
      "ad" => "CSS Dersleri"
   ],
   [
      "id" => 6,
      "parent" => 4,
      "ad" => "PHP PDO Dersleri"
   ],
   [
      "id" => 7,
      "parent" => 4,
      "ad" => "PHP Degisken Kullanimi"
   ],
];

  echo  kategoriler_listele($kategoriler);