Palidziet ludzu tikt gala ar rekursijas algoritmu. Ideja ir sekojosha: ir datubaze un tabula, kura ir viens laukums next_id - ieksha var but vai nu integer skaitlis (id) vai nu intervals formata sakuma_skaitlis - beigu skaitlis (id). Tatad veidojas koks ar zaroshanu. Tai zaroshanai ir jabut definetai IF THEN nosacijumos.
Mana pieeja:
izveidoju globalo masivu data un katru vilni rakstu jauna masiva elementa'. Vilnis = masivs. Ja notiek sashkelshanas nemu pirmo elementu un turpinu aktivo vilni, bet parejiem kopeju aktiva vilna asti jaunaja masiva data elementa un izsaucu ar rekursijas palidzibu savu funkciju velreiz tikai ar jauniem datiem.
Ir problema ka vilni kaut ka sabruk un rakstas viena un ta pasha elementa...
[2] => Array
(
[0] => IF Vai ir nepieciešama maiņa ? == Jā
[1] => THEN Vai pietiek naudas resursu ?
IF Vai pietiek naudas resursu ? == Jā
[2] => THEN Kādam ir jābūt autobusa dzinējam ?
IF Kādam ir jābūt autobusa dzinējam ? == Benzīna dzinējs
[3] => THEN Kāds ir nepieciešams autobusu tips ?
IF Kāds ir nepieciešams autobusu tips ? == Turistiskais
[4] => THEN Kāda režīmā ir jāstrādā ātrumu kastei ?
IF Kāda režīmā ir jāstrādā ātrumu kastei ? == Automātiskā
[5] => RESULT = Šī sistēma nevar Jums palīdzēt
[6] => THEN Kādam ir jābūt autobusa dzinējam ?
IF Kādam ir jābūt autobusa dzinējam ? == Dizeļdzinējs
[7] => THEN Kāds ir nepieciešams autobusu tips ?
IF Kāds ir nepieciešams autobusu tips ? == Turistiskais
[8] => THEN Kāda režīmā ir jāstrādā ātrumu kastei ?
IF Kāda režīmā ir jāstrādā ātrumu kastei ? == Automātiskā
[9] => RESULT = Šī sistēma nevar Jums palīdzēt
[10] => THEN Kāds ir nepieciešams autobusu tips ?
IF Kāds ir nepieciešams autobusu tips ? == Mikro
[11] => THEN Kāda režīmā ir jāstrādā ātrumu kastei ?
IF Kāda režīmā ir jāstrādā ātrumu kastei ? == Automātiskā
[12] => RESULT = Šī sistēma nevar Jums palīdzēt
)
error_reporting(E_ALL);
function show_construct($pgid, $arrid){
global $data;
$q = mysql_fetch_array(mysql_query("SELECT `condition`, `title`, `next_id` FROM zinashanu_baze WHERE id = ".$pgid." LIMIT 1"));
if($q['next_id'] != 0){
if(!isset($data[$arrid])) $data[$arrid] = Array();
if($pgid && $pgid != 1)
$data[$arrid][] = '<u>THEN '.$q['title'].'</u><br/><b>IF '.$q['title'].' == '.$q['condition'].'</b>';
elseif($pgid)
$data[$arrid][] = '<b>IF '.$q['title'].' == '.$q['condition'].'</b> ';
if(strpos($q['next_id'], '-')===false) show_construct($q['next_id'], $arrid);
else{
$ids=explode('-', $q['next_id']);
show_construct($ids[0], $arrid);
for($i=((abs((int)$ids[0])+1));$i<=abs((int)$ids[1]);$i++) {
$data [($arrid+1)] = Array();
$data [($arrid+1)] = array_merge ($data [($arrid)], $data [($arrid+1)]);
show_construct($i, $arrid+1);
}
}
}
else $data[$arrid][] = '<i><b>RESULT = '.$q['title'].'</b></i>';
}
global $data;
$data=Array();
show_construct(0, 0);
echo '<pre>';
print_r($data);
Datu baze izskatas sekojoshi
Tekoshais rezultats var but apskatits te
http://78.154.135.181/lis/