如何在 php 中连接 csv 文件中的两列?

How to concatenate two columns in a csv file in php?

我有一个这样的 csv 文件:

我想连接此 csv 文件中 style_color 列的值。例如 SCJEG4_1014。 我写了一个脚本,它用 header 'Pictures Names' 创建了最后一列,但在每个单元格中我只有“_”。

我该如何解决我的问题?

<?php

//uploaded xlsx file recovery
$xlsx="C:/wamp64/www/Extract_pictures_Excel/xlsx_files/".date('Y_m_d H-i-s')."_file.xlsx";
move_uploaded_file($_FILES["mon_fichier"]["tmp_name"],$xlsx);

// Excel in CSV
require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
$excel = PHPExcel_IOFactory::load($xlsx);
$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->setDelimiter(";");
$writer->setEnclosure("");
$nomcsv = "C:/wamp64/www/Extract_pictures_Excel/csv/".date('Ymd_His').".csv";
$writer->save($nomcsv);

$delimiter = ";"; 
$csv_data = array();
$row = 1;
if (($handle = fopen($nomcsv, 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        $names_pictures = $data[7].'_'.$data[4];  
        $csv_data[] = $data;
        $row++;      
    }
    fclose($handle);
}

$extra_columns = array('Pictures Names' => $names_pictures);
foreach ($csv_data as $i => $data) {
    if ($i == 0) {
        $csv_data[$i] = array_merge($data, array_keys($extra_columns));
    } else {
        $csv_data[$i] = $data = array_merge($data, $extra_columns);
    }
}


if (($handle = fopen($nomcsv, 'w')) !== FALSE) {
    foreach ($csv_data as $data) {
        fputcsv($handle, $data, $delimiter);
    }
    fclose($handle);
}


?>

您似乎只添加了最后一行的详细信息(因为您只使用了一次 $names_pictures 的值)。最好(恕我直言)在生成 $csv_data 数组时将该值添加到数据中...

while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
    $data['Pictures Names'] = $data[7] . '_' . $data[4];  
    $csv_data[] = $data;
    $row++;      
}

然后您可以删除 foreach ($csv_data as $i => $data) { 循环

如果您有不同的输出文件,您可以在上述循环之前打开输出文件并将数据直接写入输出文件,而不是使用 $csv_data...

if (($handle = fopen($nomcsv, 'r')) !== FALSE 
        && ($ohandle = fopen($nomcsvOutput, 'w')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        $data['Pictures Names'] = $data[7] . '_' . $data[4];  
        fputcsv($ohandle, $data, $delimiter);  
    }
    fclose($handle);
    fclose($ohandle);
}