如何在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]];
你的输出也应该是
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));
和循环结束前(在关闭}
内)...
fputcsv($fichier_csv, $resultat, $delimiteur);
我写了这段代码,它读取一个 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]];
你的输出也应该是
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));
和循环结束前(在关闭}
内)...
fputcsv($fichier_csv, $resultat, $delimiteur);