2014-11-25 4 views
-2

1) 드롭 다운 목록에서 염소를 선택하고 goat_id 및 해당 폐하와 댐 두 필드 모두 상위 염소 이름을 저장합니다.PHP에서 고유 한 이름을 가진 재귀 함수

2) 각 폐하와 댐 양쪽 필드에 대해 goat_name을 사용하여 재귀 적으로 호출하려고합니다.

function generate_tree($goat_id) 
{ 
    global $wpdb; 

    // get all records from database whose parent is $id 
    $sql = $wpdb->prepare("SELECT * FROM mm_goats WHERE id = %d", $goat_id); 
    $row2 = $wpdb->get_row($sql, ARRAY_A); 

    //check if there are any results 

     if(!empty($row2)) 
     { 
      echo "<ul>"; 
      if($row2['sire'] != "" || $row2['dam'] != "") 
      { 
       //print result and call function to check if it has children 
       echo "<li>Sire: ".$row2['sire']."</li>"; 
       echo "<li>Dam: ".$row2['dam']."</li>"; 
       generate_tree($row2['id']); 
      } 
      echo "</ul>"; 
     } 
} 

이 함수를 사용하여 첫 번째 선택한 폐하와 댐을 사용하여 무한 루프로 이동했습니다.

이 구조를 따르십시오.

그래서
  generate_tree($row2['id']); 
          ^^^^^^^^^^^ 

그냥 모든 순환에 SAME 염소에 대한 정보를 가져 오는 유지 : enter image description here

+0

e 현재 염소의 ID는 폐하/댐의 ID가 아니라 재귀 함수에 저장되므로'generate_tree (42)'를 호출하면'generate_tree (42)'를 호출하고 등을 호출합니다. –

+1

루프없이 무한 루프를 어떻게 만날 수 있습니까? –

+0

오. 나는 그것을 지금 본다. 나는 마르크 B가 횡설수설하고 있다고 생각했다. .. 나는 틀렸다. .. oops –

답변

-1
$sql = $wpdb->prepare("SELECT * FROM mm_goats WHERE id = %d", $goat_id); 
                ^^^^^^^       

당신은 다음 recusrive 호출에 사용되는 지정된 ID를 가져 오기 : 예에 대한 되풀이. 염소 # 42 -> 염소 # 42 -> 염소 # 42 등 ... 때까지 재귀/메모리 한도.

귀하의 재귀 호출은 댐/폐하 ID를 사용한다 : 대신

generate_tree($row['id_of_dam']); 
    generate_tree($row['id_of_sire']); 

.

#42 -> #7,10 -> #1,2,3,4 etc... 
-1

당신은 당신이 다음 재귀를 시작할 수 있습니다 당신은 다음 내부 작업을 수행 할 수 있습니다

mm_goats 
    - id 
    - sire_id 
    - dam_id 
    - name 

처럼 뭔가를 테이블 구조를이 후 그들에게

SELECT `mm_goats`.`name`, `mm_goats`.`sire_id`, `mm_goats`.`dam_id`, `sire`.`name` AS `sire_name`, `dam`.`name` AS `dam_name` 
    FROM `mm_goats` 
     INNER JOIN `mm_goats` AS `sire` ON `mm_goats`.`sire_id` = `sire`.`id` 
     INNER JOIN `mm_goats` AS `dam` ON `mm_goats`.`dam_id` = `dam`.`id` 
    WHERE `mm_goats`.`id` = %d 

을 선택 조인 업데이트해야

echo "<li>Sire: ".$row2['sire_name']; 
generate_tree($row2['sire_id']); 
echo "</li>"; 
echo "<li>Dam: ".$row2['dam_name']; 
generate_tree($row2['dam_id']); 
echo "</li>"; 
관련 문제