将带有 php 的数据输出到 csv,而不是在引号之间,而是直接 [field]=data
Output data with php to csv not inbetween quotes but straight [field]=data
我希望以不带引号的 csv 格式输出数据。
目前我有引号之间的值。对于标准 magento2 导入 "additional_attributes".
,我需要它们直接不带引号
编辑:我需要说明的是我只需要这个数组中的值不带引号。其余的需要默认的引号。
所以我有多个带引号的列,我有一个名为 additional_attributes
的列,其中包含多个信息,但需要不带引号的值。
我在一个单独的数组中定义 additional_attributes
,然后像这样将其打印到 csv:
$additional_attributes = [
'product_code' => $article->getArticleCode(),
'alcohol_gradiation' => trim(preg_replace('/\t+/', '', $article->getAlcohol())),
];
fputcsv($csvFile, $row, $delimiter);
$additional_attributes = implode(',', array_map(
function ($v, $k) {
return sprintf("%s='%s'", $k, $v);
},
$additional_attributes, array_keys($additional_attributes)
));
$row['additional_attributes'] = $additional_attributes;
我得到的 additional_attribute
值都在 ''
之间,如下图所示。它以双引号开头是正确的,但随后的值应该没有引号。
我对 additional_attribute
列的输出是这样的(需要在开头和结尾加双引号):
"product_code='2586',product_code_1='1A25861',product_code_2='N12-25860',alcohol_gradiation='13.50',allergy_warning='2586',evolution='2586',grape_variety='Merlot'"
我需要这个:
"product_code=2586,product_code_1=1A25861,product_code_2=N12-25860,alcohol_gradiation=13.50,allergy_warning=2586,evolution=2586,grape_variety=Merlot"
有解决办法吗?
您可以自己处理它,方法是遍历数组并创建一个将所有内容链接在一起的字符串(添加时只需删除尾随的 ,
)...
$addAttributes = '';
foreach ( $additional_attributes as $name => $attribute ) {
$addAttributes .= $name."=".$attribute.",";
}
$row['additional_attributes'] = rtrim($addAttributes,",");
如果您现有的代码是...
$additional_attributes = implode(',', array_map( function ($v, $k) {
return sprintf("%s='%s'", $k, $v);
},
$additional_attributes,
array_keys($additional_attributes) ));
然后你只需要更改 sprintf
因为引号在那里...
return sprintf("%s=%s", $k, $v);
我希望以不带引号的 csv 格式输出数据。 目前我有引号之间的值。对于标准 magento2 导入 "additional_attributes".
,我需要它们直接不带引号编辑:我需要说明的是我只需要这个数组中的值不带引号。其余的需要默认的引号。
所以我有多个带引号的列,我有一个名为 additional_attributes
的列,其中包含多个信息,但需要不带引号的值。
我在一个单独的数组中定义 additional_attributes
,然后像这样将其打印到 csv:
$additional_attributes = [
'product_code' => $article->getArticleCode(),
'alcohol_gradiation' => trim(preg_replace('/\t+/', '', $article->getAlcohol())),
];
fputcsv($csvFile, $row, $delimiter);
$additional_attributes = implode(',', array_map(
function ($v, $k) {
return sprintf("%s='%s'", $k, $v);
},
$additional_attributes, array_keys($additional_attributes)
));
$row['additional_attributes'] = $additional_attributes;
我得到的 additional_attribute
值都在 ''
之间,如下图所示。它以双引号开头是正确的,但随后的值应该没有引号。
我对 additional_attribute
列的输出是这样的(需要在开头和结尾加双引号):
"product_code='2586',product_code_1='1A25861',product_code_2='N12-25860',alcohol_gradiation='13.50',allergy_warning='2586',evolution='2586',grape_variety='Merlot'"
我需要这个:
"product_code=2586,product_code_1=1A25861,product_code_2=N12-25860,alcohol_gradiation=13.50,allergy_warning=2586,evolution=2586,grape_variety=Merlot"
有解决办法吗?
您可以自己处理它,方法是遍历数组并创建一个将所有内容链接在一起的字符串(添加时只需删除尾随的 ,
)...
$addAttributes = '';
foreach ( $additional_attributes as $name => $attribute ) {
$addAttributes .= $name."=".$attribute.",";
}
$row['additional_attributes'] = rtrim($addAttributes,",");
如果您现有的代码是...
$additional_attributes = implode(',', array_map( function ($v, $k) {
return sprintf("%s='%s'", $k, $v);
},
$additional_attributes,
array_keys($additional_attributes) ));
然后你只需要更改 sprintf
因为引号在那里...
return sprintf("%s=%s", $k, $v);