Как сохранить данные, обработанные этим кодом PHP, в файл CSV или TXT - PullRequest
0 голосов
/ 20 октября 2011

Я получил следующий php-код, который в настоящее время обрабатывает текстовый файл с данными, которые выглядят примерно так в каждой строке (Животные> Товары для домашних животных> Товары для птиц), и я переформатирую это, чтобы использовать его с моей базой данных.

Вместо этого я хотел бы сохранить выходные данные в файл 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);

Кстати: я уже использовал строчки, чтобы заменить операторы печати и затем сохранить их выходные данные в моем 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 голосов
/ 20 октября 2011

Если все, что вы хотите сделать, это взять то, что этот скрипт выводит в настоящее время, и сохранить его, вы можете либо использовать буферизацию вывода , как упомянуто Джаред Фарриш , либо заменить свои операторы 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...