-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”的新文件,这些文件使用“frozen.txt”作为第一列,然后分别使用每日数据txt文件的第二列和第三列作为新列.(由“;”分隔)因此,“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 代表结构化查询语言。互联网上有很多资源,周围有一个庞大的社区。

问候,

于 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 回答