簡體   English   中英

如何在 PHP 的 csv 文件中整合不同列的數據?

[英]How to integrate data on different columns in a csv file in PHP?

我編寫了這段代碼,它讀取 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>

當您的第一個循環運行時,它總是使用$resultat =覆蓋數據,一個簡單的解決方案是更改它以使用[]添加項目...

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

你的 output 也應該是

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

所以$result而不是$resultat ,也沒有<br>

但就我個人而言,我會在第一個循環中寫入數據。

所以在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));

並且在循環結束之前(在 close }內)...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM