2017-12-11 11 views
0

나는 바보 같은 짓을 한 것처럼 보였지만 나무가 보이지 않습니다.코드 만 처리하는 마지막 레코드

아래의 코드는 배열을 따라 가며 배열 요소 그룹을 문자열로 나눕니다. 이 배열을 15 번 반복하고 출력 문자열을 연결해야합니다. 출력 문자열에서 이전 레코드가 아닌 마지막 레코드의 데이터 만 사용합니다.

모든 의견을 환영합니다. 당신은 조금 일찍 for 문을 종료하는

//Now get the data for each individual 
for ($i=$ind[0];$i<$ind[14];$i++){ 
    //echo $persons[$i]."<br>"; 
    //get the id 
    if (strpos($persons[$i],"0 @")!==false){ 
     //if (strpos($record,"0 @I")!==false){ 
     $s = explode("@",$persons[$i]); 
     for($k=1;$k<=count($s)-1;$k+=2){ 
      $data .= $s[$k]." "; 
      $rec_id = "P ".$s[$k]."="; 
     } 
    } 
    //get name 
    if (strpos($persons[$i],"1 NAME")!==false){ 
     $n = str_replace('/','',$persons[$i]); 
     $n = str_replace('1 NAME ','',$n); 
     $data .= $n." "; 
     $nt = $n; 
     $pname = $n; 
     //continue; 
    } 
    //Get Sex 
    if (strpos($persons[$i],"1 SEX")!==false){ 
     $n = str_replace('1 SEX ','',$persons[$i]); 
     $data .= $n." "; 
     $sx = trim(strtolower($n));//."(".$row.",2):"; 
     $row++; 
    } 
    //Get Birth 
    if (strpos($persons[$i],"1 BIRT")!==false){ 
     $bf = "y";//Has a birth fact 
    } 
    if ((strpos($persons[$i],"2 DATE")!==false) && $bf =="y"){ 
     $n = str_replace('2 DATE ','',$persons[$i]); 
     $gotdate = "y"; 
     $data .= "B: ".$n." "; 
     $b_date = "- B:".trim($n)." in "; 
    } 
    if (((strpos($persons[$i],"2 PLAC")!==false) && $bf =="y") && $gotdate =="y"){ 
     $n = str_replace('2 PLAC ', '', $persons[$i]); 
     $data .= $n; 
     $b_place = $n; 
     if (empty($b_place)){$b_place =" ";}; 
     $bf = "n"; 
    } 
    //Get Death 
    if (strpos($persons[$i],"1 DEAT")!==false){ 
     $df = "y";//Has a death fact 
    } 
    if ((strpos($persons[$i],"2 DATE")!==false) && $df =="y"){ 
     $n = str_replace('2 DATE ','',$persons[$i]); 
     $data .= "D: ".$n." "; 
     if (empty($n)){$n=" ";}; 
     $d_date = "- D:".trim($n)." in "; 
    } 
    if ((strpos($persons[$i],"2 PLAC")!==false) && $df =="y") { 
     $n = str_replace('2 PLAC ', '', $persons[$i]); 
     $data .= $n . " <BR>"; 
     if (empty($n)){$n=" ";}; 
     $d_place = $n; 
     $df = "n"; 
    } 
} 
if (empty($d_date)){$d_date=" ";}; 
if (empty($d_place)){$d_place=" ";}; 
//Now construct note field 
$p_note ="= ".trim($pname)." was born ".substr($b_date,4).trim($b_place); 
if (($d_date)!==" "){$p_note .=" and died ".substr($d_date,4).$d_place;} 
//now write this record to string 
$opf .= $rec_id.$sx."(".$row.",2):".$pname."\r\n".$b_date.$b_place."\r\n".$d_date.$d_place."\r\n".$p_note; 

답변

3

...

 } 
    } // for is ending hear, move this to end of code 
if (empty($d_date)){$d_date=" ";}; 

당신이 표시된 줄에}이를 제거하고 마지막에 넣어 경우 - 당신이 처리해야 모든 레코드와 마지막 것만이 아닙니다.

+0

미안하지만 작동하지 않습니다. 이미 시도했습니다. 내가 거기로 이동하면 각 개인에 대한 데이터가 정의되지 않은 변수 오류의로드와 함께 해당 개인에 대한 배열의 행 수와 동일하게됩니다. – Colin

+0

$ 데이터가 반복되는 것을 의미하면 각 루프의 시작 부분에'$ data = '';를 설정하면 각 사람에 대해 반복되는 데이터가 중지됩니다. –

+0

$ 데이터 변수는 테스트를위한 것입니다. $ opf는 출력 문자열입니다. – Colin

0

Nigel Ren (도움 주셔서 감사합니다)의 도움으로 데이터를 처리하기 위해 추가 루프가 필요했습니다. 그래서 시작 지금

for ($j = 0; $j < 14; $j++) { 
      for ($i = $ind[$j]; $i < $ind[$j+1]; $i++) { 

이 그리고 내가 원래 게시 된 코드 샘플의 끝에서 $ OPF 변수 줄 끝에서 루프를 닫습니다.