gpt4 book ai didi

php - CSV,将多行数据合并为单行并合并到同一列中

转载 作者:行者123 更新时间:2023-11-30 00:04:54 28 4
gpt4 key购买 nike

media_gallery_image         category        sku         created_at          price
/c/u/cutting_shafts.jpg Specials 01mb 3/19/2013 22:59 1487
/s/h/shred_bin_3.jpg Cross Cut
/e/c/ecc_switch_3.jpg Destroyit
/2/6/2604ccm.jpg Commercial
Paper Phoenix

这些是 CSV 文件中的一种产品的详细信息。对于该产品,它向我显示了 sku、创建日期、价格以及多个类别和图库图像。

现在的问题是它显示第一个媒体库图像,第一个类别,sku为01mb,日期为3/19/2013 22:59,价格为1487连续,

然后在第二行显示第二个图库图像,第二个类别,SKU 为空白,日期为空白,价格为空白

然后在第三行(与第二行相同),依此类推。

我有数百种产品,它们都有多个图像、类别,但没有显示在与上面相同的产品数据行中。我想合并同一行和同一列中的所有媒体库图像,并用逗号(,)分隔。例如“/c/u/cutting_shafts.jpg、/s/h/shred_bin_3.jpg、/e/c/ecc_switch_3.jpg、/2/6/2604ccm.jpg”

类别列也是如此。

是否可以通过 php 编辑和更新 CSV 来实现此目的?

更新

以下是所需内容的屏幕截图:- enter image description here

最佳答案

以下内容执行类似于对指定为参数的列进行分组和合并的操作。它可以用来做你想做的事:

<?php

function setup_row($groups, $row){
$res = $row;
array_map(function($v) use(&$res,$row){
$res[$v] = array($row[$v]);
},$groups);
return $res;
}

function concat_row($groups, $coalesces, $row, &$merge){
array_map(function($v) use ($row, &$merge) {
if (isset($row[$v]) && $row[$v] != "")
$merge[$v][] = $row[$v]; // add to group concat columns
},$groups);
array_map(function($v) use ($row, &$merge) {
if (isset($row[$v]) && $row[$v] != "")
$merge[$v] = $row[$v]; // coalesce columns
},$coalesces);
}

function implode_row($groups, $merge){
array_map(function($v) use (&$merge) {
$merge[$v] = implode(',', $merge[$v]);
},$groups);
return $merge;
}

function csv_group_by($groups, $coalesces, $group_by, $infile, $outfile){
$current_group = "";
$result;
if (($hin = fopen($infile, "r")) !== FALSE &&
($hout = fopen($outfile, "w")) !== FALSE) {
while (($row = fgetcsv($hin, 0, ",")) !== FALSE) {
if ($row[$group_by] != $current_group){
if (isset($merge)){
$result = implode_row($groups, $merge);
fputcsv($hout, $result,',');
}
$merge = setup_row($groups, $row);
} else {
concat_row($groups, $coalesces, $row, $merge);
}
}
if (isset($merge)){
$result = implode_row($groups, $merge);
fputcsv($hout, $result,',');
}
fclose($hin);
fclose($hout);
}
}

csv_group_by(array(1,2), array(), array(5),”infile”,"outfile");

?>

替换outfileoutfile在最后一行输入您想要的文件名。

或者将函数后面的脚本结尾替换为

If (count($argv) == 3)
csv_group_by(array(1,2), array(), array(5),$argv[1],$argv[2]);

?>

并在命令行中调用脚本,如下所示:

$ php script.php <infile> <outfile>

哪里<infile><outfile>具有预期的含义。

哦,脚本要求 csv 文件以逗号分隔,您必须编辑代码才能更改该行为。

关于php - CSV,将多行数据合并为单行并合并到同一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24659569/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com