php - 用于重新排列 csv 数据并输出为 csv 的 PHP 脚本
问题描述
我需要重新排列数据并将其连接成 2 列。列将是 SKU 和 Feature。其中 SKU = SKU 和 Feature 将衍生自以下格式的其他列。
对于黄色标记的行:特征列数据将是:Edge:Square Edge;Wide Plank|Finish:Glossy;Smooth|Grade:A(Select & Better/Prestige)|Installation Location:Second Floor;Main Floor........
我可以解析 csv 并卡住。
$lines = explode( "\n", file_get_contents( '3b.csv' ) );
$headers = str_getcsv( array_shift( $lines ) );
$data = array();
foreach ( $lines as $line ) {
$row = array();
foreach ( str_getcsv( $line ) as $key => $field )
if($headers[$key]=='sku'){
$row[ $headers[ $key ] ] = str_replace(",",";",$field);
}
if($headers[$key]!='sku' && $field!='') {
$row['feature'] = $headers[ $key ].":".str_replace(",",";",$field)."|";
}
$row = array_filter( $row );
$data[] = $row;
}
echo "<pre>";
print_r($data);
echo "</pre>";
任何人请帮我这样做或建议任何脚本来做到这一点。
解决方案
您尚未提供传入 csv 文件的实际文本,因此我假设正常解析它会正常工作。
我从你接下来的两个问题中借用了我的脚本来无条件地处理你的数据。
标题行的数据用作特征名称的查找数组。
代码:(未经测试)
$file = fopen("3b.csv", "r");
$headers = fgetcsv($file);
$final_array = [];
while (($row = fgetcsv($file)) !== false) {
$sku = $row[0];
unset($row[0]);
foreach ($row as $featureNameIndex => $featureValues) {
foreach (explode(',', $featureValues) as $featureValue) {
$final_array[] = [
'sku' => $sku,
'feature' => "{$headers[$featureNameIndex]}:{$featureValue}"
];
}
}
}
fclose($file);
var_export($final_array);
这种方法将生成一个关联数组的索引数组——每个数组包含两个元素。
具有多个值的特征被划分并存储为单独的子数组。
推荐阅读
- reactjs - 没有重载与简单反应应用程序上的此调用匹配
- python - 我如何应用逻辑回归算法来使用卫星数据绘制决策边界
- javascript - 作用域链和闭包的区别
- sql-server - SQL Server ODBC“TCP 提供程序:错误代码 0x274C”
- sql-server - 加入 charindex 很慢
- vba - Recordset.AddNew 上带有预定义数组的错误 3001
- react-native - 我的登录屏幕中的错误“找不到变量”
- colors - 色轮的圆形饱和亮度渐变
- json - jq - 过滤不包含的实例不起作用
- python - 将 TensoBoard 与 TPU 一起使用时出现 UnimplementedError