【发布时间】:2016-12-17 12:06:13
【问题描述】:
我们的故事:(如果您急于解决问题,请参阅下面的简短版本)
在广泛搜索将multidimensional array (with named keys) 恢复到其 CSV 文件的方法后提出了这个问题。您可能会说:“但这在 SO 的多个页面上都有介绍,请搜索更好!”但我们做到了,我们发现我们试图屈从于我们的意志的结果,但失败了。
首先这样做的原因是要从 CSV 中删除干扰我们查询和代码的其余部分的列。
所以现在我们回来询问 SO:
我们已将 CSV 读入一个多维数组,使用标题的第一行作为键名。
然后我们使用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);
这只是一遍又一遍地将相同的值返回到一个数组中:
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,';','"');
}
【问题讨论】:
-
尝试在 SO 中搜索
convert json to csv- 结果会更符合您的喜好 -
你已经展示了你的开始,以及你想要达到的目标,这很好,但我认为包含一个显示您当前正在使用的代码,没有任何故事,并简要说明不是您想要的。
-
这些结果将如何帮助我,我需要寻找哪些结果才能应用于 php,以及 JSON 如何工作,因为我不要求 JSON 解决方案。这是我们在 SO 上没有发现的问题,我们现在已经处理了 2 个晚上,我们找到的解决方案不能满足我们需要它做的事情......
-
关于您的编辑,我的评论不是为了解释您的反对意见(不是我的)。只是想提供帮助。
-
感谢您的提问,我添加了我们尝试过的最后一个 foreach,但由于我们尝试了这么多,很难回忆所有选项是什么。当我们正在寻找解决类似问题的其他解决方案时,这些解决方案既没有像我们那样的尺寸,也没有键编号。这些解决方案很短,所以看起来像 foreach 中的 foreach 可能会奏效。一旦我回忆起它,我们就认为我们有另一个紧密的解决方案。
标签: php csv multidimensional-array flatten fputcsv