0

これらのtxtファイルを出力するとき、郡ファイルごとのカウント制限を使用して、一意の郡でグループ化しようとしています。たとえば、クエリがこのアクセス可能な結果フィールドに 2 つの一意の郡を返すとします: $row['county_txt']..$per_file制限を 2500 に設定したとします。スクリプトは現在、per_file などで機能していますが、郡のグループ化では機能していません。以下は、私がいる場所のマッシュです。これを解決するのに役立つガイダンスをありがとう。

出力例:


グリーン郡 - グリーン郡の合計結果 2900 の出力は 2 つのファイルになります。

出力ファイルは次のようになります。

緑-#1-20130627-2500.txt
緑-#2-20130627-400.txt


レッド郡 - レッド郡の合計結果 12650 出力は 5 ファイルになります。

出力ファイルは次のようになります。

赤-#1-20130627-2500.txt
赤-#2-20130627-2500.txt
赤-#3-20130627-2500.txt
赤-#4-20130627-2500.txt
赤-#5-20130627-150.txt


... // earlier part of script
     // Functions I've been attempting

$county[] = $row['county_txt'];

function unique_county() {
    foreach($county as $unq_cnty) {
    echo $unq_cnty;
return $unq_cnty;
}

} 

 function get_unique_county() {
    $column = array();
    while($row = mysql_fetch_array($result)){
        $column[] = array_unique($row['county_txt']);
    echo $column;
}
}

get_unique_county();

$file_count = 1;
$recs = 0;
$per_file = 2500;
$footer = "FOOTER";
$default_contents = $contents = array("BODY CONTENT TOP");

while ($row = mysql_fetch_array($result)) {
    $line = "...";
    $contents[] = $line; // Each array element will be a line in the text file
    $i++;
    $recs++;

    if ($county == $unq_cnty && $i == $per_file) {
    $contents[] = $footer; // Add the footer to the end
    file_put_contents($unq_county . "-#" . $file_count .  "-" . date('Y') . "-" . $recs .  '.txt', implode("\r\n", $contents));
        $i = 0;
        $recs = 0;
        $contents = $default_contents;
        $file_count++;
    } // End of if()
} // End of while()
4

2 に答える 2

0

カウンターが必要で、それをリセットできるようにする必要があります (リセットすると、ファイルが保存されます)。

例 (未テスト、例のみ):

<?php
$rowCounter = 0;
$fileCounter = 1;
$startID = md5(microtime(1));
$fp = fopen("{$startID}.txt", "w");
while ($row = mysql_fetch_array($result)) {
  $rowCounter++;
  fwrite($fp, $row['county_txt']."\r\n");
  if($rowCounter == 2500) {
    fclose($fp);
    if($startID) {
      rename("{$startID}.txt", "Red-#{$fileCounter}-".date("Ymd")."-{$rowCounter}.txt");
      $startID = md5(microtime(1));
    }
    $fp = fopen("{$startID}.txt", "w");
    $rowCounter = 0;
    $fileCounter++;
  }
}
// Save last file
fclose($fp);
rename("{$startID}.txt", "Red-#{$fileCounter}-".date("Ymd")."-{$rowCounter}.txt");
?>

その点で、関数を使用しないでくださいmysql_*。代わりに、mysqli少なくとも or を使用してPDOください。

于 2013-07-02T17:42:21.670 に答える