我现在要从一张表里查找2个字段之间的关系,另外有一个字段表示它们之间是单向连接还是双向连接,单向很好解决,关键是双向问题,我现在的解决方法是建一个临时表来放这两个字段source_id和target_id首先从原来的表中把这两个字段取出来
放到临时表中,然后再从原来的表中查找到存在双向关系的字段添加到临时表中,这样就全都变成单向的了,操作都在临时表进行,但是我的递归方法存在问题,无法得到正确的结果,我认为是在跳出循环的判断中存在问题但是不知道怎么修改,希望高手指点。
下面是我的代码$valueArr就是存放要查询的字段比如5,6之间的关系
foreach($valueArr as $v)
{
$wherearr[$v]=$v;
$allkey=array();
$arrvalue = array('|'.$v=>'|'.$v);
$data[$v] = get_xml_data_new($v,$arrvalue,$allkey,null);

}function get_xml_data_new($key,$newarray,$allkey,$itemarr)
{ if($itemarr==null){
$itemarr[]=$key;
}

$allkey[]=$key;
$difarr=array_keys($newarray);
$keys=array_unique($difarr);
$c_keys=count($keys);
$sql = "SELECT Target_ID FROM 4k_tmp WHERE Source_ID = '".$key."' ";

$result = $GLOBALS['db']->getCol($sql);
$arr = array();

if(!empty($result))
{
$arr = $result;


foreach($arr  as $item)
{
if(!in_array($item,$allkey)){

for($i=0;$i<$c_keys;$i++){
$str=substr($keys[$i],strrpos($keys[$i],'|')+1);

if($str==$key){
$keys[$c_keys]=$keys[$i].'|'.$item;
$keyarr=explode('|',$newkeys[$count_keys+1]);
$keyvalue=array_count_values($keyarr);
if(!in_array(2,$keyvalue)){

$newarray[$keys[$c_keys]]=$keys[$c_keys];

}
break;
}
}
$itemarr[]=$item;

$arr[$item] = get_xml_data_new($item,$newarray,$allkey,$itemarr);

}else{

continue;

}


}
}
unset($newarray);
return $arr;

}