PHP: объединить 2 столбца во всех строках CSV-файла - PullRequest
0 голосов
/ 03 мая 2020

Успешный код

  • откроет CSV-файл
  • объединит содержимое 2 полей
  • поместит эти объединенные значения в другое существующее поле
  • создать новый CSV-файл с объединенными полями

Пример запуска CSV-файла:

product_name, тип продукта, размер, категория, подкатегория

Lite 1/2 keg, Beer , 1/2 кег ,, pilsner

Bud Light 1/2 кег, пиво, 1/2 кег ,, pilsner

Ожидаемый конечный CSV-файл:

product_name, producttype , размер, категория, подкатегория

Lite 1/2 кег, Пиво, 1/2 кег, Пиво; 1/2 кег; пилсер, pilsner

Bud Light 1/2 кег, Пиво, 1/2 кеги, пиво; 1/2 кеги, пилсер, pilsner

1 Ответ

0 голосов
/ 04 мая 2020

Вот решение, которое я нашел. Скорее всего, не самый элегантный.

<?php
//Brand_Name	Brand_Description	SKUNumber	UPC	product_type	CATEGORY	SUB-CATEGORY	BEER TYPE	BEER STYLE	PRODUCER	price_regular	Size	Web Active	Quantity_Available
$columns = ["Brand_Name","Brand_Description","SKUNumber","UPC","product_type","CATEGORY","SUB-CATEGORY","BEER TYPE","BEER STYLE","PRODUCER","price_regular","Size","Web Active","Quantity_Available"];
//$columns = ["sku","category","description","image","small_image","thumbnail", "price","color"];

$file = fopen("Products_In.csv", "r"); //Open the old file for reading
$newFile = fopen("Products_Out.csv", "w"); //Create a new file for writing

while (($data = fgetcsv($file)) !== FALSE) {
    $row = array_combine($columns, $data);
    if(!empty($row['BEER TYPE'])){
	    $category = "{$row['product_type']};{$row['Size']};{$row['BEER TYPE']}";
    } else {  
	    $category = "{$row['product_type']};{$row['Size']}";
    }
	$row['SUB-CATEGORY'] = $category;
    fputcsv($newFile, array_values($row)); //write data into new file
}

fclose($file);
fclose($newFile);
echo "<h1>Categories updated</h1>";
?>
...