Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 03:49   #1
LeoN
Форумчанин
 
Аватар для LeoN
 
Регистрация: 03.11.2006
Сообщений: 278
Восклицание Нужен алгоритм PHP+MySQL

есть 3 таблицы с полями login и parent, нужен алгоритм вытаскивания всей иерархии из таблиц. Иерархия вида С - С - С - К - Л. кол-во вложенных С неограничено. Алгоритм нужен срочно! Выкладываю мою нерабочую версию:
Код:
<?php
#
include_once('../common.php');
#
$dmn=array(0=>'subagents',1=>'clients',2=>'salons');
$nmd=array('subagents'=>0,'clients'=>1,'salons'=>2);
#
function forarr($rrr)
{
	if (count($rrr)>0){foreach ($rrr as $r1 => $r2){$ret[]=$r2;}return implode(':',$ret);}
	else {return '';}
}
#
function ie_sub($line){
	$k=0;
	$rez=mysql_query("SELECT `login`,`parent` FROM `subagents`");
	while ($res=@mysql_fetch_array($rez)) {$tm[$res['parent']][]=$res['login'];}
	$ie=explode(':',$line);
	
	do {$line.= (count(forarr($tm[$ie[$k]])))>0) ? ':'.forarr($tm[$ie[$k]]) : '';$ie=explode(':',$line);$k++;
	print_r($ie);
	echo '<br>';}
	while ($k<count($ie));

	return $line;
}
#
function ie_line ($line,$sts){
	global $dmn;
	#line
	@preg_match_all('/(\w+)/',$line,$lin);
	$line="'".@implode("','",$lin[0])."'";
	#query
	$rz = @mysql_query("SELECT `login`,`parent` FROM `".$dmn[$sts]."` WHERE `parent` IN (".$line.")");
	while ($rs = @mysql_fetch_array($rz))
	{$rzr[]=array(0=>$rs['login'],1=>$rs['parent']);$ln.=$rs['login'].":";}
	$rzr['line']=$ln;
	#return
	return $rzr;
}
#
function ie_get($lg,$stt){
	global $nmd;
	#stt
	$k=$nmd[$stt];
	$i=1;
	#while
	while ($k<3)
	{
		$ll=($i==1)? $lg : (($k==2) ? $rt[$i-2]['line'] : $rt[$i-2]);
#		$ll=($i==1)? $lg : $rt[$i-2];
#print_r();
		switch ($k)
		{
			case 0: $rt[$i-1]=ie_sub($ll); break;
			case 1: $rt[$i-1]=ie_line($ll,1); break;
			case 2: $rt[$i-1]=ie_line($ll,2); break;
		}
		$k++;$i++;
	}
	#return
	return $rt;
}
#

#print_r(ie_get('vadim','subagents'));
echo ie_sub('vadim');

?>
Помогите исправить/улучшить этот код или дайте другой, может у кого уже есть.
Вывод должен быть вида:
Массив['subagents']=array([0]=>array([0]=>login[1]=>parent)[1]=>array([0]=>login[1]=>parent))
так же и Массив['clients'] и Массив['salons']
Разработка сайтов -дело прикольное
LeoN вне форума Ответить с цитированием
Старый 28.03.2009, 04:48   #2
LeoN
Форумчанин
 
Аватар для LeoN
 
Регистрация: 03.11.2006
Сообщений: 278
По умолчанию

Исправил сам, кому надо - обращайтесь.
Разработка сайтов -дело прикольное

Последний раз редактировалось LeoN; 28.03.2009 в 13:03.
LeoN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен компаньон-программист PHP, MySQL, Ajax AladdinPS Свободное общение 0 03.10.2008 18:07
Нужен программист MySql+php arsfan Фриланс 1 29.01.2008 08:58