-1

私はPHPにかなり慣れていないので、これはすでにどこかで答えられている可能性があります。ただし、私の問題に対する同様の答えが見つからなかったため、次のようになります。

「frozen.txt」というテンプレートファイルがあります。このファイルには、凍結されたアイテム番号のリストが含まれています。その内容は次のようになります


23476
23829
26974


また、毎日の売上データを表す約 20 個のファイルがあります。「frozen-4-1.txt」、「frozen-4-2.txt」、「frozen-4-3.txt」などです。各 txt ファイルには、区切り記号で区切られた 3 つの列が含まれています。 ";" . 最初の列は "frozen.txt" とまったく同じです。2列目は「Each」単位の在庫数、3列目は「Box」単位の在庫数です。たとえば、「frozen-4-1.txt」は次のようになります。


23476;30;3
23829;100;10
26974;50;5


「frozen-4-2.txt」は次のようになります


23476; 20; 2
23829; 90; 9
26974; 40; 4


「frozen-4-3.txt」は次のようになります


23476; 10; 1
23829; 60; 6
26974; 20; 2


ここで、「outputeach.dat」と「outputbox.dat」という 2 つの新しいファイルを作成します。このファイルは「frozen.txt」を最初の列として使用し、日次データ txt ファイルの 2 列目と 3 列目をそれぞれ新しい列として使用します。 .(";" で区切られます) したがって、"outputeach.dat" は次のようになります。


23476;30;20;10
23829;100;90;60
26974:50;40;20


「outputbox.dat」は次のようになります


23476;3;2;1
23829;10;9;6
26974:5;4;2


これを達成しようとしている私のコードは次のとおりですが、プログラムの最後で立ち往生しています


<?php
include('path.php');
$space = "\r\n"; // For NewLine ...
$frzlist = array();
$readfrz = fopen("C:/purchase/dailydata/frozen.txt", "r");
while (!feof($readfrz)) {
$foo2 = fgets($readfrz);
$trufoo2 = trim( preg_replace( '/\s+/', ' ', $foo2 ) ); // get rid of new line in $foo2
$frzlist[] = $trufoo2; // read all the frozen item list into array $frzlist 
}
fclose($readfrz);
if ($handle = opendir(BASE_PATH)){
while (false !== ($file = readdir($handle)))
{
if ($file == "." || $file == ".."){}else
{
if(!strstr($file,"txt"))
{
continue; //Skip as file is not txt format
}
$s = explode("-",$file);
$prefix = $s[0];
$prefix1 = $s[1];
$prefix2 = $s[2];
//echo $prefix . " ";   // representing catogory
//echo $prefix1 . " ";  // representing month
//echo $prefix2 . " ";  // representing day
}

}
}
for($i=1 ; $i<32; $i++){  //loop through one month data
$days = $prefix1 . "-" . $i ;
$file1 = BASE_PATH . $prefix . "-" . $prefix1 . "-" . $i . ".txt" ;
//echo $file1 . "\n";
//echo $days . "\n";
if (file_exists($file1)) {
$fileopen1 = fopen($file1,"r"); 
while (!feof($fileopen1)) {
$foo = fgets($fileopen1);
$members1[] = $foo; // read all the  contents into array $members1
}
$outputfrzpri = array();
$outputfrzsec = array();
if($prefix = "frozen"){
foreach ($members1 as $x1){
$pieces1 = explode(";", $x1); 

CODE needs help here
CODE needs help here
}

}
}   
} 
?>

あなたのアドバイスは大歓迎です

4

2 に答える 2

1

テキストデータベースをやっているようです。ただし、SQL を使用するだけで、人生がはるかに簡単になると思います。これまで、情報を使用してやりたいことはすべて行われてきたからです。

あなたはそれを実現するために多くの努力をしてきたと確信しています。PHP について学べば学ぶほど、あなたの生活を簡素化する多くのものが既に存在することを理解するようになりますが、この情報を保存する方法は間違っていると思います。

SQL は、Structured Query Language の略です。インターネット上には多くのリソースがあり、その周りには大きなコミュニティがあります。

よろしく、

于 2013-05-26T19:21:17.977 に答える
0

いくつかのアドバイス:

  1. $frzlist[] = $trufoo2;配列の連想配列を作成してデータを入力する代わりに:

    $frzlist[$trufoo2] = array(
         'each' => array(),
         'box' => array(),
    );
    
  2. セミコロンの区切りの周りにスペースがある場合がありますが、次を使用してスペースを取り除くことができますpreg_split

    $pieces1 = preg_split("/\s*;\s*/", $x1);
    
  3. 対応する配列にデータを割り当てます。

    $key = $pieces1[0];
    $frzlist[$key]['each'][] = $pieces1[1];
    $frzlist[$key]['box'][] = $pieces1[2];
    
  4. すべてのファイルの行を作成するメイン配列を反復処理する

    foreach($frzlist as $key => $values){
        $eachline = $key .';'.implode(';', $values['each']);
        $boxline  = $key .';'.implode(';', $values['box']);
        //write to file
    }
    
于 2013-05-26T19:43:14.117 に答える