我们的故事:(如果您急于排除故障,请在下方提供简短版本)
在广泛搜索获取multidimensional array (with named keys)
其CSV文件的方法后,会询问此问题。你可能会说:"但这可以在SO的多个页面上覆盖,更好地搜索!"但是我们做了,结果我们发现我们试图屈服于我们的意愿,但失败了。
首先,原因是从CSV中删除了干扰我们的其他查询和代码的列。
现在我们回过头来问SO:
我们已经使用标题'将CSV读入多维数组。第一行作为关键名称。
然后我们使用unset($array[$i]['insert_date']);
删除数组中的列
我们还str_replace'd
变量中的$header
列名称。
因此,我们广泛阅读csv,将它们放入具有数字第一索引的令人敬畏的数组中,以及以CSV文件的第一行命名的第二维键。
我们还将CSV文件中的原始标题存储在一个名为$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);
这只是一遍又一遍地将相同的值返回到数组中:
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);
在我们的案例中解决方案:感谢&#34;不要恐慌&#34; &安培; &#34; CBroe&#34;
$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,';','"');
}
答案 0 :(得分:2)
看起来你可能会使它变得比它需要的更复杂。如果你有$array
,那就是你所展示的那个:{/ p>
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
来获取标题行,使用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,';','"');
}
答案 1 :(得分:2)
看起来你觉得这里太复杂了......
$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再次写入文件应该没有问题。)