2012-07-28 3 views
0

나는 이런 식으로 DB 구조를가집니다.다차원 배열을 사용하여 PHP에서 재귀 루프

stopid | parentid 
2  |  1 
3  |  1 
5  |  2 
9  |  2 
8  |  2 
11  |  3 
11  |  9 

시작 중지 및 최종 정지를 검색하고 싶습니다. 그것은 정렬 또는 프로그래밍 방식으로 검색하는 것입니다. 부모님 아이디로 먼저 중지했습니다. 그리고 마지막 stopid stopid. 1에서 11까지 첫 번째 정지 지점을 검색해야하므로 마지막 정지 11에서 시작하여 루프를 반복 한 다음 루프를 반복합니다. 그들의 논리가 맞습니까? 나는 시도했지만 성공하지 못했다. 모든 루트를 최종화 할 필요는 없습니다. 난 단지 첫 번째 뿌리가 호환되기를 원한다. 같은 ..

1 -> 11 - 1 -> 3> 2 -> 9 - 이런 식으로> 11 ... 나는 당신을 이해하는 것과

extract($_POST); 
echo "From :$from to $to".'<br/>'; 
$sql="select parentid, stopid from routes WHERE stopid = '".$to."' "; 
echo $sql.'<br/>'; 
$result = mysql_query($sql) or die(mysql_error()); 
$count = mysql_num_rows($result) or die(mysql_error()); 
$stopid = array(); 
while($row = mysql_fetch_array($result)) { 
    $stopid[$row['stopid']][] = $row['parentid']; 
} 
echo '<pre>'; 

$countarray = count($stopid); 
while($countarray >= 1){ 
    foreach($stopid as $finalstop_value){ 
     foreach($finalstop_value as $finalstop_ky => $finalstop_vl){ 
      $query = "SELECT * FROM routes WHERE stopid = '".$finalstop_vl."'"; 
      $sql = mysql_query($query) or die(mysql_error()); 
      echo $query. ' Gives '.mysql_num_rows($sql).' rows...<br/>'; 
      while($row = mysql_fetch_array($sql)) { 
       $new_stopid[$finalstop_vl][$row['stopid']][] = $row['parentid']; 
      } 
      echo '<pre>'; 
      print_r($new_stopid); 
          // $stopid[$finalstop_vl][] = $new_stopid; 
      $countarray--; 
     } 
    } 

}  
print_r($stopid); 
exit; 
+0

전체 시퀀스를 루트 (1-3-11)까지 또는 * 모든 * 루트 (예제에서 1 개)를 찾으시겠습니까? – galymzhan

+0

나는 모든 루트를 얻고 싶지 않다. (선택 사항 - U가 모든 루트를 찾을 수있는 경우). 다른 하나는 적어도 하나의 뿌리를 필요로합니다 (아무 문제가 없거나 짧습니다)하지만 나는 순서를 원합니다. –

답변

0

는 n 차 트리 구조를 가지고 두 개의 노드를 연결하는 경로를 검색해야합니다. 글쎄, 이것은 고전적인 알고리즘 문제이고, 많은 해결책들이 당신을 기다리고 있습니다 ;-)

게시물에 언급하지 않은 특정 속성이 없다면 Breadth-first search을 구현하는 것이 좋습니다. .

+0

내가 썼다는 것을 알았지 만, 이론적으로 프로그래밍 방식으로 갇혀있다. 그렇게하려면 코드를 어떻게 조작해야합니까? –

+0

문제의 크기 (노드 수 등)에 따라 메모리에 트리 구조를 만들거나 노드간에 연결에 대한 DB 쿼리를 수행 할 수 있습니다. 그런 다음 노드 스택을 구축하여 루프를 방문하십시오 ;-) 나는 그것이 무엇을 의미하는지 분명히 알기를 바랍니다. – emesx

관련 문제