2011-10-20 138 views
0

我得到了以下php代碼,該代碼當前正在處理一個包含每行(動物>寵物用品>鳥用品)的數據的txt文件和我正在重新格式化它以將其與我的數據庫一起使用。如何將此PHP代碼處理的數據保存爲CSV或TXT文件

我想要做的是將輸出數據保存爲CSV或TXT文件,或者將其保存到我的瀏覽器中,就像它現在一樣。請注意,腳本中有3個打印部分。

任何幫助或建議將不勝感激。

set_time_limit(0); 

//read and process txt.txt 
$file_handle = fopen("txt.txt", "rb"); 

$j = 0; 

while (!feof($file_handle)){ 

    $line = fgets($file_handle); 

    $parts = explode('>', $line); 

    if(count($parts) == 1){ 

     $parts[0] = trim($parts[0]); 

     $db[$j] = array("CatName"=>$parts[0], "CatID"=>$j+1, "PID"=>0, "Level"=>1); 

     print $db[$j]["CatName"]."\t".$db[$j]["CatID"]."\t".$db[$j]["PID"]."\t".$db[$j]["Level"]."\r\n"; 


    } else { 

     $i =0; 

     $no = count($parts); 

     $t = $no-1; 

     while($t != -1){ 

      $parts[$t] = trim($parts[$t]); 

      $t = $t-1; 
     } 

     $k = $j-1; 

     while($i != $j){ 

      while($k > -1){ 

       if(strcmp($parts[$i], $db[$k]["CatName"]) == 0){ 

        $flag = 1; 

       } 

       $k = $k-1; 

      } 

      if($flag == 1){ 

       if(strcmp($parts[$no-2], $db[$i]["CatName"]) == 0){ 

        $found = $i; 

       } 

      } 

      $i = $i+1; 

     } 

     if($flag == 1){ 

      $db[$j] = array("CatName"=>$parts[$no-1], "CatID"=>$j+1, "PID"=>$db[$found]["CatID"], "Level"=>$no); 

      print $db[$j]["CatName"]."\t".$db[$j]["CatID"]."\t".$db[$j]["PID"]."\t".$db[$j]["Level"]."\r\n"; 


     } 

     if($flag == 0 && $no == 1){ 

      $db[$j] = array("CatName"=>$parts[$no-1], "CatID"=>$j+1, "PID"=>0, "Level"=>$no); 

      print $db[$j]["CatName"]."\t".$db[$j]["CatID"]."\t".$db[$j]["PID"]."\t".$db[$j]["Level"]."\r\n"; 


     } 

    } 

    $j = $j+1; 

    $flag = 0; 

} 

fclose($file_handle); 

BTW:我已經用刺來代替打印語句,然後它們的輸出保存到我​​的csv文件,但它不會工作,它只返回空值。 例中使用:

//print $db[$j]["CatName"]."\t".$db[$j]["CatID"]."\t".$db[$j]["PID"]."\t".$db[$j]["Level"]."\r\n"; 
$csv_data .= $db[$j]["CatName"]."\t".$db[$j]["CatID"]."\t".$db[$j]["PID"]."\t".$db[$j]["Level"]."\r\n"; 
+0

參見[輸出緩衝( http://php.net/manual/en/book.outcontrol.php)。 –

+0

會查看它,但頁面沒有給出一個很好的例子,如何正確使用輸出控制 – luiavag

回答

0

如果你想要做的是採取什麼樣的這個腳本目前輸出並保存它,您可以使用output buffering提到Jared Farrish,或語句串聯到一個字符串變量替換您print語句。

例如,你可以聲明一個空字符串是這樣的:

$output = ''; 

...,然後用替換每個print語句concatenation assignment.=

// Instead of: 
print $db[$j]["CatName"]."\t".$db[$j]["CatID"]."\t".$db[$j]["PID"]."\t".$db[$j]["Level"]."\r\n"; 

// Replace with: 
$output .= $db[$j]["CatName"]."\t".$db[$j]["CatID"]."\t".$db[$j]["PID"]."\t".$db[$j]["Level"]."\r\n"; 
+0

感謝您的答案喬納森,我已經用蜇取代打印語句,但它不會工作,它只會返回空值 – luiavag

+0

嗯,這很奇怪。那麼在代碼的最後,$ csv_data仍然是空的?你在使用前初始化它嗎? –

相關問題