2011-10-20 48 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仍然是空的?你在使用前初始化它吗? –

相关问题