Php 在Symfony中将多维数组导出到CSV文档
有这样一个多维数组(n嵌套),通过print\r派生:Php 在Symfony中将多维数组导出到CSV文档,php,arrays,symfony,csv,export,Php,Arrays,Symfony,Csv,Export,有这样一个多维数组(n嵌套),通过print\r派生: Array ( [id] => 829 [name] => name surname [info] => Array ( [direct] => 13 [count] => 492 [total] => 108 [asoc] => 4.514 )
Array
(
[id] => 829
[name] => name surname
[info] => Array
(
[direct] => 13
[count] => 492
[total] => 108
[asoc] => 4.514
)
[children] => Array
(
[0] => Array
(
[id] => 530
[name] => name surname2
[info] => Array
(
[direct] => 6
[count] => 49
[asoc] => 3.267
[total] => 14
)
[_children] => Array
(
[0] => Array
(
[id] => 628
[name] => name surname3
[info] => Array
(
[direct] => 1
[count] => 1
[asoc] => 1
[total] => 0
)
[_children] => Array
(
[0] => Array
(
[id] => 2
[name] => Name..
[info] => Array
(
[direct] => 0
[count] => 0
[asoc] => 0
)
[children] => Array
(
)
[1] => Array
(
[id] => 3
[name] => Name..S
[info] => Array
(
[direct] => 1
[count] => 2
[asoc] => 1
)
[children] => Array
(
)
我需要将其写入CSV文件,保持结构(树)。底线是,我尝试了许多方法如何将其写入文件,但由于某些原因,我没有成功(不要严格判断,我是新手)。CSV文档应具有以下结构:
name surname (13, 492, 108,4.514)//в скобках это info из массива
name surname2 (6, 49,3.267, 14)
name surname3 (1, 1, 1)
name surname4
name surname5(1,2,1)
如果您能提供关于这件事的有用信息(或书籍),我将不胜感激!非常感谢。
我试着这样做:
foreach (new \RecursiveIteratorIterator(new \RecursiveArrayIterator($structureTree)) as $key => $value) {
fputcsv($file, array($value));
}
但我收到的是:
829
name surname
13
492
108
4.514
...
Name..S
1
2
1
更新
我试着这样做,但我如何才能使树结构
public function recursive($array, $file)
{
foreach ($array as $key => $item) {
if (is_array($item) && $key === 'info')
fputcsv($file, $item);
elseif (is_array($item)) {
$this->recursive($item, $file);
fputcsv($file,array('-'));
}
elseif ($key == 'id')
continue;
else
fputcsv($file, array($item));
}
}
嗯,通常你不使用CSV来存储树。。。CSV更好地用于矩阵(二维数组/表)。还有,我们需要看看你试过什么。@Pawamoy,我试过这么做,就像上面提到的一样。但由于我有一个n嵌套的数组,它对我不起作用……你必须写一个函数,写一行(名字、姓氏等),然后在子对象上递归(即,该函数为每个子对象再次调用自己)。@Pawamoy,请你举个例子,我知道如何进行递归,但我不知道如何制作树结构…我没有尝试您的代码,但似乎您已经接近:)在您想要的输出中,您向子级添加缩进。要使用递归函数实现这一点,请添加第三个参数,例如
indent
或level
。每次再次调用递归函数时,请提高该级别。当您写入CSV时,请使用该级别了解需要在开头添加多少空单元格!