Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 09:08 25.06.24 
Компютри и Интернет
   >> PHP
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема рекурсия и масиви  
Авторk (Нерегистриран)
Публикувано24.01.03 20:32



Здравейте,
дайте идейка как може да се реши следния проблем: с рекурсивна функция (ох колко ги обичам) се опитвам да изведа сортиран по име списък на категориите въведени в дървовиден тип от 1 мускл таблица.

Като краен резултат от функцията искам да получа масив с всички фетчвани записи
$a[0][Rid]
$a[0][Category]
$a[1][Rid]
$a[2][Category]
и т.н.

ф-ята има следния вид

function x($currentid) {
static $i=0;

$sql = "SELECT ..... WHERE ParentId='$currentid'";
$result=mysql_query($sql,$db);

while ($A[$i] = mysql_fetch_array($result)) {
......
$A = x($A[$i][Rid]); // tuk triabva da e neshto drugo
$i++;
}
return $A;
}

проблемът е как да съединявам получените масиви от всяко повикване на ф-ята
пробвах array_match, но нищо не се получи (зависва)

накратко казано, как да реализирам рекурсия, която връща резултат масив?
правили ли сте такова нещо?



Тема Re: 1 kurs MEIнови [re: k]  
Автор Dremesht (спящ)
Публикувано25.01.03 02:00



ne mi se misli tochno po tova vreme i tochno po tvoiata zadacha, zatova ti davam neshtata koito sum gi pravil predi 2 godini, moje i da ne sa mnogo efektivni no v momenta gi polzvam

get_listtree gleda tablicata $table sus structura "id|parent:name"ti vrushta dobaviane kum dropdown listbox ("list") vsichkite lista ot parent vuzela "$parent" i selektira v tiah reda s id "$mch"


function get_listtree($table, $list,$parent,$mch)
{
$result=mysql_query("SELECT id, name FROM $table WHERE parent='$parent' ORDER BY name ASC");
while($row=mysql_fetch_array($result)):
$id=$row["id"];
$name=stripslashes($row["name"]);
$level=get_deeplevel($id,$table);
$lines="";$insidelist="";
for($i=0;$i<$level;$i++): $lines.="&nbsp;&nbsp;&nbsp;"; endfor;
if($id==$mch):$sel=" selected";else: $sel="";endif;
$list.="<option value=\"$id\"$sel>$lines$name</option>\n";
$insidelist=get_listtree($insidelist,$id,$mch);
$list.=$insidelist;
endwhile;
return $list;
}

function get_deeplevel($cl, $table)
{
$level=0;
$parent=mysql_result(mysql_query("SELECT parent FROM $table WHERE id='$cl'"),0,'parent');
while($parent):
$parent=mysql_result(mysql_query("SELECT parent FROM $table WHERE id='$parent'"),0,'parent');
$level+=1;
endwhile;
return $level;
}


tova biaha spomeni, sega predpolagam che niama da imash problemi da gi razviesh neshtata do tova koeto ti triabva, a oshte poveche ne se i samniavam che shte gi post-nesh rezultatite tuk v tozi forum.



Тема Re: BTWнови [re: k]  
Автор Dremesht (спящ)
Публикувано25.01.03 02:04



s pascal ne stavat li neshtata che si padnal kum PHP, po dobre da go ostavish i da pochnesh da uchish .net ... shte ni se mahne glavobolieto i suma ti vaprosi porodeni ot lipsata na obrazovanieto.



Тема Re: 1 kurs MEIнови [re: Dremesht]  
Авторk (Нерегистриран)
Публикувано25.01.03 10:18



въобще няма никакъв проблем да се реализира ф-я от вида

function x($param) {
......
niakakav_cikal {
if (uslovie) {
$output .= x($stoinost);
}
} //end cikal
return $output;
}

натрупването на резултата в стринг е лесно, но не искам в тялото на ф-ята да вкарвам форматирането на изхода и разни нтмл тагове (всъщност в момента съм го направила така, поради липса на по-умно решение). Ако се реализира с натрупване на стойностите "във вид удобен за логаритмуване" така да се каже, ф-ята ще стане универсална, с много приложения, докато при решение със стринг мога да я ползвам само в конкретния случай - не е ли тъпо а?
Проблемът е как да се реализира ф-ята да връща МАСИВ, който между отделните повиквания да "сглобява" получените до момента елементи и, най-важното, той да се запази двумерен. Защото едно просто присвояване в рекурсивна ф-я ще доведе до следното
$A[0][Rid]
$A[1][0][Rid]
$A[1][1][Rid]
$A[1][1][0][Rid] или нещо подобно



Тема Re: 1 kurs MEIнови [re: Dremesht]  
Авторk (Нерегистриран)
Публикувано25.01.03 10:20



определено има по-елегантни решения за твоето примерче



Тема Re: 1 kurs MEIнови [re: k]  
Автор Дpeмeщ (заспал)
Публикувано25.01.03 10:33



znam che ima, stiga da preodolea marzela si i da pomislia polovin chas, inache tozi primer mi se nalaga da go polzvam vednuj godishno

-----------------------
гърбавия ковчега ще го изправи


Тема Re: 1 kurs MEIнови [re: k]  
Автор Дpeмeщ (заспал)
Публикувано25.01.03 10:49



$count=0;
$a=array();

function x($param1){
global $a;
global $count;
$result=mysql_query("SELECT id, name FROM table WHERE parent=$param1");
if(mysql_num_rows($result)):
while($row=mysql_fetch_array($result)):
$a[$count][]=$row["id"];
$a[$count][]=$row["name"];
$count++;
x($row["id"]);
endwhile;
endif;
}

basi ... vse edno che e niakva olimpiada po programiraneto.

-----------------------
гърбавия ковчега ще го изправи

Редактирано от Дpeмeщ на 25.01.03 10:51.



Тема Re: 1 kurs MEIнови [re: Дpeмeщ]  
Авторk (Нерегистриран)
Публикувано25.01.03 14:46



даааа..........
това е един начин, все пак може да се помисли въпроса да се реши без глобална променлива.
10х

А относно последната ти реплика: та нали сме тук и за да пофилософстваме, иначе е много сухарско




Тема Re: 1 kurs MEIнови [re: k]  
Автор Дpeмeщ (заспал)
Публикувано25.01.03 17:41



nai-dobroto filosoftvane e na kruchmata :))

-----------------------
гърбавия ковчег ще го изправи


Тема Re: рекурсия и масивинови [re: k]  
Автор ro6avia (mnogo ro6avia)
Публикувано25.01.03 19:51



A siguren li si 4e ti triabva rekursivna funkcia ? Tui kakto gledam kakvo si napisal mi se varti iz glavata 4e moze6 da napravi6 tala :
$sql = "SELECT Id,ParentId, Catigory from table";
$result=mysql_query($sql,$db);
while ($row= = mysql_fetch_array($result)) {
$A[$row[0]]['category']=$row[2];
$A[$row[0]]['Rid']=$row[1];
}
koeto ti dava masiv s parvi index ID-to, v category ima6 kategoriata a v ['Rid'] -> ParentId-to
dosta po-barzo 6te raboti i izbiagva6 rekursiata.
A ako iska6 rekursia za6toto sa ti podali zada4ka tova e drug vapros. Kazi mi strukturata na Db-to i to4nia format na izhodnite danni i 6te pomislim po vaprosa

E tuk ni6to niama :




Страници по тази тема: 1 | 2 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.