猿问

如何在PHP中整合csv文件中不同列的数据?

我编写了这段代码,它读取 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

....

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


<?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");

            }

紫衣仙女
浏览 134回答 1
1回答

喵喵时光机

当您的第一个循环运行时,它总是使用 覆盖数据,一个简单的解决方案是更改此设置以使用...$resultat = 添加项目[]$resultat[] = [$data[6] . '_' . $data[7]];你的输出也应该是fputcsv($fichier_csv, $result, $delimiteur);如此$result与否$resultat,亦无<br>;但就我个人而言,我会将数据写入第一个循环内。所以之后fgets()...fgets($handle); // skip header line// Create CSV output file$chemin = 'csv/photos.csv';&nbsp;$delimiteur = ';';$fichier_csv = fopen($chemin, 'w+');fprintf($fichier_csv, chr(0xEF) . chr(0xBB) . chr(0xBF));在循环结束之前(在 close 内})...fputcsv($fichier_csv, $resultat, $delimiteur);
随时随地看视频慕课网APP
我要回答