如何将此PHP代码处理的数据保存为CSV或TXT文件

时间:2011-10-20 02:39:06

标签: php csv text-files

我得到了以下PHP代码,目前正在处理一个txt文件,其中包含每行显示的数据(动物>宠物用品> Bird Supplies),我正在重新格式化以将其用于我的数据库。

我想要做的是将输出数据保存为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:我已经使用stings来替换print语句,然后将它们的输出保存到我​​的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";

1 个答案:

答案 0 :(得分:0)

如果要执行此操作,请执行此脚本当前输出并保存的内容,您可以使用output buffering作为Jared Farrish提及,或将print语句替换为连接到的语句字符串变量。

例如,你可以像这样声明一个空字符串:

$output = '';

...然后将每个print语句替换为.=,如// 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";

{{1}}