【问题标题】:How to integrate data on different columns in a csv file in PHP?如何在 PHP 中集成 csv 文件中不同列的数据?
【发布时间】:2020-07-02 08:40:53
【问题描述】:

我编写了这段代码,它读取一个 csv 文件并将其与文件夹中的照片进行比较,并向我显示比较结果,如下所示:

A1101_90: Several images
A1119_90: No image in the folder
A1119_854: No image in the folder
A1119_4023: No image in the folder
....

我想把它们放在一个 CSV 文件中,放在两个不同的列上:

A1101_90 | Several images
A1119_90 |No image in the folder
A1119_854 |No image in the folder
A1119_4023 | No image in the folder
....

我尝试使用带有 fputcsv 的 foreach,但它只显示我列表中的最后一项,我该如何更改?

<?php
echo '<pre>';
$dataImage = [];
$dataImageTmp = [];
$path = $_POST['path'];

$photos = scandir($path);
$photos = array_map('strtoupper', $photos);

if (($handle = fopen("../miniproducthub.csv", "r")) !== FALSE) {
    fgets($handle); // skip header line

        // Create CSV output file
        $chemin = 'csv/photos.csv'; 
        $delimiteur = ';';

        $fichier_csv = fopen($chemin, 'w+');
        fprintf($fichier_csv, chr(0xEF) . chr(0xBB) . chr(0xBF));

    while (($data = fgetcsv($handle, 9000000, ";")) !== FALSE){
        if ($data[0] != null) {
            for ($i = 1; file_exists($fileName = $path.trim($data[6]).'_'.str_pad(trim($data[7]),4, "0", STR_PAD_LEFT).'-'.$i.'.JPG'); ++$i) {
                if (!in_array($fileName, $dataImage)){
                    $dataImage[$data[6] . '_' . $data[7]]['file'][$i] = $fileName;
                    $fileName = str_replace($path, '', $fileName);
                    if (!in_array($fileName, $dataImageTmp)){
                        $dataImageTmp[] = $fileName;
                    }
                }
                if (isset($dataImage[$data[6] . '_' . $data[7]]['TOTAL'])) {
                    $dataImage[$data[6] . '_' . $data[7]]['TOTAL']++;
                } else {
                    $dataImage[$data[6] . '_' . $data[7]]['TOTAL'] = 1;
                }
            }
              if ($i == 1) 
              { 
                    $resultat = [$data[6] . '_' . $data[7].' : No image in the folder'];
                    print_r($data[6] . '_' . $data[7].' : No image in the folder'."\n");
            }
            elseif ($i == 2)
                {
                    $resultat = [$data[6] . '_' . $data[7].' : 1 single view of the image'];
                     print_r($data[6] . '_' . $data[7].' : 1 single view of the image'."\n");
                }
                else
                {
                    $resultat = [$data[6] . '_' . $data[7].' : Several images'];
                    print_r($data[6] . '_' . $data[7].' : Several images'."\n");
                }   
       }

       fputcsv($fichier_csv, $resultat, $delimiteur);
    }
  
    fclose($fichier_csv);//close
}
?>
 <!-- Link file -->
<a href='csv/photos.csv' target='_blank'>Download</a>

【问题讨论】:

    标签: php csv fputcsv


    【解决方案1】:

    当您的第一个循环运行时,它总是使用$resultat = 覆盖数据,一个简单的解决方案是更改它以使用[] 添加项目...

    $resultat[] = [$data[6] . '_' . $data[7]];
    

    你的输出也应该是

    fputcsv($fichier_csv, $result, $delimiteur);
    

    所以$result 而不是$resultat,也没有&lt;br&gt;

    但我个人会在第一个循环中写入数据。

    所以在fgets()之后...

    fgets($handle); // skip header line
    
    // Create CSV output file
    $chemin = 'csv/photos.csv'; 
    $delimiteur = ';';
    
    $fichier_csv = fopen($chemin, 'w+');
    fprintf($fichier_csv, chr(0xEF) . chr(0xBB) . chr(0xBF));
    

    在循环结束之前(关闭}内)...

    fputcsv($fichier_csv, $resultat, $delimiteur);
    

    【讨论】:

    • 我把 fputcsv($csv_file, $result, $limiter) 放在哪个循环里面? @Nigel Ren
    • 看起来好像应该在while循环内。
    • 我根据您的指示更新了我的代码,但在我的 csv 中,我将所有内容放在一列中,如何将文本的值分隔为两列? @Nigel Ren
    • 我认为你需要分离出你的数据,其中一个例子是$resultat = [$data[6] . '_' . $data[7].' : Several images'];,我认为最后一部分应该是分离的 - $resultat = [$data[6] . '_' . $data[7], 'Several images'];。我已经更改了[7], 'Several中间的位
    • 非常感谢,我已经改了,效果很好! @Nigel Ren
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2013-12-28
    • 2023-03-28
    • 2017-12-09
    • 1970-01-01
    • 2020-02-27
    • 2011-02-17
    相关资源
    最近更新 更多