2ci üsul ne funksiyadan istifadə olunur nə də arraydən. birinicidən uzundu və kodun uzunluğu dərinliyə görə daha da uzanır.əlverişsiz olsa da kiməsə lazım ola bilər. məsələn mənə bu üsulla yazmaq lazım idi. aşağıdakı nümunədə 3cü dərəcəyə qədər dəriliyə gedir kod. yəni ana kateqoriya 1-dir, uşağı 2dir, 3isə 2nin usagıdır.
[code][/code]
Simple Database Access
Bulletin Board
<?php
$i=0;
while ($i
<?php
$j=0;
echo "";
echo "";
echo "".$subject.' - ';
echo "";
echo "".$author."";
echo ' '.$date;
echo "";
while ($j
<?php
$k=0;
echo "";
echo "";
echo "".$child_subject.' - ';
echo "";
echo "".$child_author."";
echo ' '.$child_date;
echo "";
while ($k
<?php
echo "";
echo "";
echo "".$grandchild_subject.' - ';
echo "";
echo "".$grandchild_author."";
echo ' '.$grandchild_date;
echo "";
echo "";
$k++;}
echo "";
$j++;}
echo "";
$i++;
}
mysql_close();
?>
[/code/
Kiməsə gələcəkdə lazım ola bilər, həlli yerləşdirirəm.
1ci üsul array (massiv)-dən istifadə etməklə, fikrimcə bu ən ugurlu seçimdir, sonsuz sayda və sonsuz dərinlikdə parent-child (kateqoriya-altkateqoriya) münasibəti yaratmaq olar.
[code]
<html>
<head>
<title>Simple Database Access</title>
</head>
<body>
<?php
$hostName = "dbhostadi";
$userName = "dbistifadeciadiniz";
$password = "dbparolunuz";
$databaseName = "categories";
if (!($link=mysql_connect($hostName,$userName,$password))) {
printf("Error!!!");
exit();
}
if (!mysql_select_db($databaseName, $link)) {
printf("Error!");
exit();
}
?>
<?php
function ShowTree($ParentID) {
//global $link;
$sSQL="SELECT Id, name,parent_id FROM categories WHERE parent_id='$ParentID' ";
$result=mysql_query($sSQL);
$num=mysql_numrows($result);
$i=0;
if ($i<$num) {
echo"<ul>";
while ( $row = mysql_fetch_array($result) ) {
$ID1 = $row["Id"];
echo "<li>";
echo"<a href='#'>".$row["name"]."</a>";
ShowTree($ID1);
}
echo "</ul>";
}
$i++;
}
ShowTree(0);
?>
</body>
</html>
[/code]
Salam, bu məsələni aşağıdakı rekursiya ilə həll etmək mümkündür:
[code]
function printFamilyTree($pId=0, $level=1)
{
if ($pId==null)
{
$res = mysql_query('SELECT * FROM tbl_family WHERE p_id is null');
}
else
{
$res = mysql_query('SELECT * FROM tbl_family WHERE p_id='.$pId);
}
while ($row = mysql_fetch_assoc($res))
{
showHyphen($level);
print ' '.$row['name'].'';
printFamilyTree($row['id'], $level+4);
}
return ;
}
function showHyphen($count)
{
for ($i=0; $i<$count; $i++)
{
print '-';
}
}
[/code]
* Qeyd edim ki, bu sadəcə bir nümunədir yaxşı olarki bu rekursiyanı DB serverde yazasınız və applicationdan həmin stored procedure -ni çağırasız.
Bahruz, onda sizə məsləhət görərdim ki, Wordpress Core-sində yerləşən wp_list_categories-in strukturunu araşdırasınız. O eynən siz deyən işi görür(məhdudiyyətsiz sayda alt pilləsi olan tree), hər halda wordpress-i quranlar əminəm ki ən optimal yoldan istifadə ediblər. Əgər tapacağınız o yol sizin üçün yeni olmayacaqsa, deməli hazırda bildiyiniz üsullar ən optimal variantdır.
array(massiv)-dən istifadə edib istədiyim nəticəni ala bilirəm əslində.eləcədə SQL-də JOİN-lər vastəsi ilə istədiyimi ala bilirə,php-dən minimum istifadə edib. massivdən istifadə etmədən nəticəni almaq istiyirəm. bu da deyəsən mümkün deyil. zəhmət olmasa bu yöndə məsləhət verin. sizcə arraysiz mümkündür kateqoriya qurmaq? normal dəyişəndən istifadə edib bir nəticə almaq olar?özüm də araşdırıram tapsam yazacam.çox sağolun.
çox sagolun. ama məncə istədiyim nəticəni vermir sizin postdaki skript. çünki siz parent olaraq parentİd-si sıfır olanları seçirsiniz. məndə isə parent id sıfırdan fərqli də ola bilir. yəni child kateqoriya həm də parent kateqoriya ola bilir. Classic həm child kateqoriyadır həm də 70s və 90s üçün parent kateqoriyadır. sizin skript 1ci dərəcəyə qədər enə bilir. Yəni menyu var alt menyu var məndə isə alt menyunun da altmenyusu var.
Salam. Mən bu haqda bloqumda yazmışdım. İndi bloqa girmək mümkün olmasa da Google keşdə qalanları oxuya bilərsiniz.
http://pastebin.com/pPxLRgx7
Saytdan şəklin yüklənməsinə qadağa
Saytın serverdə yerinin dəyişdirilməsi
Mobil brauzer oyununun qrafikası üçün rəssam lazımdır