从 CSV 到带有 headerkeys 的数组,现在又回到 CSV
From CSV to array with headerkeys, now back to CSV
我们的故事:(如果您急于解决问题,请查看下面的简短版本)
在广泛搜索将 multidimensional array (with named keys)
返回其 CSV 文件的方法后,提出了这个问题。你可能会说:"But this is covered on multiple pages on SO, search better!"但我们做到了,我们发现的结果我们试图屈服于我们的意志,但失败了。
这样做的首要原因是从 CSV 中删除干扰我们其余查询和代码的列。
所以现在我们回来问 SO:
我们已经将 CSV 文件读入多维数组,使用 headers' 第一行作为键名。
然后我们使用 unset($array[$i]['insert_date']);
从数组中删除列
我们还 str_replace'd
来自 $header
变量的那些列名称。
所以我们正在广泛读取 csv,将它们放入具有数字第一索引和以我们的 CSV 文件的第一行命名的第二维度键的很棒的数组中。
我们还将 CSV 文件中的原始 Header 存储在一个名为 $header
的变量中,其字符串如下:'"brand";"category";"category_path"
所以.. $header
是一个字符串,$array
是我们的多维数组。
我们想要做的是创建一个全新的文件,我们的 $header
作为第一行,我们的 $array's
值作为字符串..
要写入的文件:$putfile = fopen("feeds/broken/lu-zz.csv", "rw");
我们正在使用:fputcsv($file, $array,';','"');
来编写
最好是:\n
行结尾
简而言之:
来自这个:
array (size=3886)
0 =>
array (size=19)
'brand' => string 'Tommy Hilfiger' (length=14)
'category' => string '' (length=0)
'category_path' => string 'Heren|Jeans|Blue jeans' (length=22)
1 =>
array (size=19)
'brand' => string 'Marc Aurel' (length=10)
'category' => string '' (length=0)
'category_path' => string 'Dames|Jurken|Zomerjurken' (length=24)
2 =>
array (size=19)
'brand' => string 'Rinascimento' (length=12)
'category' => string '' (length=0)
'category_path' => string 'Dames|Jurken|Print jurken' (length=25)
致此
"brand";"category";"category_path"
"Tommy Hilfiger";"";"Heren|Jeans|Blue jeans" (/n)
"Marc Aurel";"";"Dames|Jurken|Zomerjurken" (/n)
"Rinascimento";"";"Dames|Jurken|Print jurken" (/n)
我们尝试的最后一段代码:
{
foreach($subarray as $value){
for ($i=0, $m=count($value); $i<$m; $i++){
//$test = implode('";"',$subarray) ;
//$tmp = array();
$result = call_user_func_array('array_merge', $subarray);
//$tmp[]= array_merge($subsub[$i]);
var_dump($result);
fputcsv($putfile, $subarray,';','"');
}
}
} fclose($putfile);
这只是把相同的值returns一遍又一遍地放入一个数组中:
foreach ($array as $subarray) {
foreach($subarray as $value){
for ($i=0, $m=count($value); $i<$m; $i++){
//$test = implode('";"',$subarray) ;
//$tmp = array();
print_r($subarray);
fputcsv($putfile, $subarray,';','"');
}
}
} fclose($putfile);
我们案例中的解决方案:感谢"Don't Panic" & "CBroe"。
$putfile = fopen("feeds/stukkefeeds/lu-zz.csv", "wb");
$header = str_replace('"','',$header1);
$titel = explode(';',$header);
var_dump($titel);
// then write in your data
fputcsv($putfile, $titel,';','"');
foreach ($array as $line) {
fputcsv($putfile, $line,';','"');
}
看起来您可能使它变得比需要的更复杂。如果你有一个 $array
就是你展示的那个看起来像:
array (size=3886)
0 =>
array (size=19)
'brand' => string 'Tommy Hilfiger' (length=14)
'category' => string '' (length=0)
'category_path' => string 'Heren|Jeans|Blue jeans' (length=22)
...
并且您有一个可用文件句柄打开
$putfile = fopen("feeds/broken/lu-zz.csv", "w");
您根本不需要嵌套循环。您可以通过在数组中的第一项(或任何一项,实际上)上使用 array_keys
来获取 header 行,使用 fputcsv
将其写入文件,然后遍历数组并写入每一行数据,也用 fputcsv
.
$first_line = reset($array); // get the first line
fputcsv($putfile, array_keys($first_line)); // use its keys to write the headers
// then write in your data
foreach ($array as $line) {
fputcsv($putfile, $line,';','"');
}
看来你想的太复杂了...
$firstIteration = true;
foreach($yourArray as $elem) {
if($firstIteration ) { // if this is the first array element,
// write out its keys to create the CSV heading line
echo implode(';', array_keys($elem)) .'<br>';
$firstIteration = false;
}
echo implode(';', $elem) .'<br>'; // output the data for each array element
}
(请注意,我在这里使用 echo 和 implode 进行演示;结果不会包含封闭的 "
- 将其切换为再次将 CSV 写入文件应该没有问题。)
我们的故事:(如果您急于解决问题,请查看下面的简短版本)
在广泛搜索将 multidimensional array (with named keys)
返回其 CSV 文件的方法后,提出了这个问题。你可能会说:"But this is covered on multiple pages on SO, search better!"但我们做到了,我们发现的结果我们试图屈服于我们的意志,但失败了。
这样做的首要原因是从 CSV 中删除干扰我们其余查询和代码的列。
所以现在我们回来问 SO:
我们已经将 CSV 文件读入多维数组,使用 headers' 第一行作为键名。
然后我们使用 unset($array[$i]['insert_date']);
从数组中删除列
我们还 str_replace'd
来自 $header
变量的那些列名称。
所以我们正在广泛读取 csv,将它们放入具有数字第一索引和以我们的 CSV 文件的第一行命名的第二维度键的很棒的数组中。
我们还将 CSV 文件中的原始 Header 存储在一个名为 $header
的变量中,其字符串如下:'"brand";"category";"category_path"
所以.. $header
是一个字符串,$array
是我们的多维数组。
我们想要做的是创建一个全新的文件,我们的 $header
作为第一行,我们的 $array's
值作为字符串..
要写入的文件:$putfile = fopen("feeds/broken/lu-zz.csv", "rw");
我们正在使用:fputcsv($file, $array,';','"');
来编写
最好是:\n
行结尾
简而言之:
来自这个:
array (size=3886)
0 =>
array (size=19)
'brand' => string 'Tommy Hilfiger' (length=14)
'category' => string '' (length=0)
'category_path' => string 'Heren|Jeans|Blue jeans' (length=22)
1 =>
array (size=19)
'brand' => string 'Marc Aurel' (length=10)
'category' => string '' (length=0)
'category_path' => string 'Dames|Jurken|Zomerjurken' (length=24)
2 =>
array (size=19)
'brand' => string 'Rinascimento' (length=12)
'category' => string '' (length=0)
'category_path' => string 'Dames|Jurken|Print jurken' (length=25)
致此
"brand";"category";"category_path"
"Tommy Hilfiger";"";"Heren|Jeans|Blue jeans" (/n)
"Marc Aurel";"";"Dames|Jurken|Zomerjurken" (/n)
"Rinascimento";"";"Dames|Jurken|Print jurken" (/n)
我们尝试的最后一段代码:
{
foreach($subarray as $value){
for ($i=0, $m=count($value); $i<$m; $i++){
//$test = implode('";"',$subarray) ;
//$tmp = array();
$result = call_user_func_array('array_merge', $subarray);
//$tmp[]= array_merge($subsub[$i]);
var_dump($result);
fputcsv($putfile, $subarray,';','"');
}
}
} fclose($putfile);
这只是把相同的值returns一遍又一遍地放入一个数组中:
foreach ($array as $subarray) {
foreach($subarray as $value){
for ($i=0, $m=count($value); $i<$m; $i++){
//$test = implode('";"',$subarray) ;
//$tmp = array();
print_r($subarray);
fputcsv($putfile, $subarray,';','"');
}
}
} fclose($putfile);
我们案例中的解决方案:感谢"Don't Panic" & "CBroe"。
$putfile = fopen("feeds/stukkefeeds/lu-zz.csv", "wb");
$header = str_replace('"','',$header1);
$titel = explode(';',$header);
var_dump($titel);
// then write in your data
fputcsv($putfile, $titel,';','"');
foreach ($array as $line) {
fputcsv($putfile, $line,';','"');
}
看起来您可能使它变得比需要的更复杂。如果你有一个 $array
就是你展示的那个看起来像:
array (size=3886)
0 =>
array (size=19)
'brand' => string 'Tommy Hilfiger' (length=14)
'category' => string '' (length=0)
'category_path' => string 'Heren|Jeans|Blue jeans' (length=22)
...
并且您有一个可用文件句柄打开
$putfile = fopen("feeds/broken/lu-zz.csv", "w");
您根本不需要嵌套循环。您可以通过在数组中的第一项(或任何一项,实际上)上使用 array_keys
来获取 header 行,使用 fputcsv
将其写入文件,然后遍历数组并写入每一行数据,也用 fputcsv
.
$first_line = reset($array); // get the first line
fputcsv($putfile, array_keys($first_line)); // use its keys to write the headers
// then write in your data
foreach ($array as $line) {
fputcsv($putfile, $line,';','"');
}
看来你想的太复杂了...
$firstIteration = true;
foreach($yourArray as $elem) {
if($firstIteration ) { // if this is the first array element,
// write out its keys to create the CSV heading line
echo implode(';', array_keys($elem)) .'<br>';
$firstIteration = false;
}
echo implode(';', $elem) .'<br>'; // output the data for each array element
}
(请注意,我在这里使用 echo 和 implode 进行演示;结果不会包含封闭的 "
- 将其切换为再次将 CSV 写入文件应该没有问题。)