2

csv 的标题是日期、eav、ess 等……我跟踪的下载。我有一个获取参数的函数:例如:eav。我激活函数 dl_stats("eav"); 在处理 eav 的页面中。它应该获得今天的下载次数,例如:10 并在 11 中加一。等等...如果 csv 中的日期不是今天,则从 1 开始创建一个新行。问题是它在今天可以正常工作,但是午夜过后是休息时间。不换行,继续同一行。

我花了 3 天时间试图修复它,但我找不到解决方案。

这是代码。

function dl_stats($produs){
$dir = "stats/"; // file directory - edit directory if you run function from diferent folder
$file = $dir."dl.csv"; // file  -

$file = file($file);
//$file = array_reverse($file); // reverse so last dl is first

$data_array = array();
foreach($file as $f){ // file is csv and is exploded by ,
    $data_array[] = explode(",",$f);
}

// variables
$csv_content = '';
$data = strftime("%d-%m-%Y", time()); // define today
$data = strval($data);
$new_data = false;

$header = array("data","eav","ess","ems","qr", "ecs","ecsp"); // associative array header

$products = array("eav","ess","ems","qr", "ecs","ecsp");
$product = array();

// loop array 
foreach($data_array as $content){

    $content = array_combine($header, $content); // combine to make associative array

    // look to see if the date in csv is the same as today, if not a new row must be created with the new date
    if($data == $content['data']){
        $new_data = false; // if false the date is not changed and will be added +1 to the product
    }else{
        $new_data = true; // if true, new date + zero all dl that day
    }

    //$produs = 'eaven32';
    // set product to add 1 
    foreach($products as $key){
        if($produs == $key){
            $product[$key] = '1';
        }else{
            $product[$key] = '0';
        }
    }

    if($content['data'] == 'data'){
        // do not display the header row
        $csv_content.=  $content["data"] . "," . $content["eav"] . "," . $content["ess"] . "," . $content["ems"] . "," . $content["qr"] . "," . $content["ecs"] . "," . $content["ecsp"];
    }else{
        if($data == $content['data']){
            $csv_content.=  $content["data"] . "," . 
            ($content["eav"] + $product['eav']) . "," . 
            ($content["ess"] + $product['ess']) . "," . 
            ($content["ems"] + $product['ems']) . "," . 
            ($content["qr"] + $product['qr'])   . "," . 
            ($content["ecs"] + $product['ecs']) . "," . 
            ($content["ecsp"] + $product['ecsp']) . "\n";
        }else{
            $csv_content.=  $content["data"] . "," . $content["eav"] . "," . $content["ess"] . "," . $content["ems"] . "," . $content["qr"] . "," . $content["ecs"] . "," . $content["ecsp"];
        }
    }
} // eof foreach($data_array as $content)


$csv = $dir."dl.csv"; // file


if($new_data == false){
    file_put_contents($csv, $csv_content);
}else{
    $prod = implode(",", $product); // implode to get product values
    $csv_content_new = $data . "," . $prod;
    file_put_contents($csv, $csv_content . $csv_content_new);
}

}

也许如果其他人第一次看代码,可以找到解决方案。

提前致谢。

编辑:

csv 格式如下所示。

第一行(应该是标题):其中的每个数据都是单独的列

日期 | eav | 埃斯 | EMS | 二维码 | 电子商务 | escp

下面的第二行和每隔一行(应该是递增 1 的数据)

18-07-2013| 38 | 50 | 4 | 0 | 2 | 2

如果我现在使用这个日期运行它,将按预期添加另一行,如下所示:05-09-2013| 38 | 50 | 4 | 0 | 2 | 2但如果我让它直到明天......这会发生

日期 | eav | 埃斯 | EMS | 二维码 | 电子商务 | escp

18-07-2013| 38 | 50 | 4 | 0 | 2 | 2

05-09-2013| 38 | 50 | 4 | 0 | 2 | 206-09-2013| 38 | 50 | 4 | 0 | 2 | 2

日期将在前一天的最后一行和最后一列之后,而不是在新行上。我认为只有在您自己的服务器上运行它才能弄清楚。它可能会欺骗你它工作正常,但第二天 csv 被搞砸了:) 连续 3 天发生在我身上,并进行了多次修改。

最后编辑:

好的,代码是正确的,我认为这是 csv 文件的问题。如果您将 if($new_data == false){ 更改为 if($new_data != false){ 一个新日期,它将与今天的日期生成 2 个日期,然后切换回 if($new_data != false){ 到if($new_data == false){ 并且 csv 以某种方式修复:),它可以工作,如果有人想使用我的代码,可以自由地做。我有一个在 php 中显示 csv 文件的文件,如果你想要它,只需给我一条消息。

4

1 回答 1

0

在这一行中(显然它不是罪魁祸首,但你永远不知道):

if($data == $content['data']){

条件要么一直触发,这导致$new_data始终为假

或此代码(由 触发$new_data == true):

$prod = implode(",", $product); // implode to get product values
$csv_content_new = $data . "," . $prod;
file_put_contents($csv, $csv_content . $csv_content_new);

没有按预期工作。


检查第一部分:

尝试使用var_dump($data)var_dump($content['data'])查看它们是否有所不同。

检查第二部分:

尝试反转你if($new_data == false){if($new_data == true){,看看你的代码是否真的写了新行。

于 2013-09-05T12:26:56.990 回答