Вот такой многомерный массив (с n-вложенными), полученный через print_r:
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));
}
}
@Pawamoy, я пробовал это сделать, как в вопросе это. Но так как у меня есть массив с n-вложенностью, у меня не вышло ...
Вам нужно написать функцию, которая записывает строку (имя, фамилию и т. д.), А затем рекурсивно обращается к дочерним элементам (т.е. функция снова вызывает себя для каждого дочернего элемента).
@Pawamoy, не могли бы вы привести пример, я знаю, как сделать рекурсию, но я не знаю, как сделать древовидную структуру ...
Я не пробовал ваш код, но похоже, что вы близки :) В желаемом выводе вы добавляете отступы для детей. Чтобы сделать это с помощью вашей рекурсивной функции, добавьте третий параметр, например, indent или level. Каждый раз, когда вы снова вызываете рекурсивную функцию, увеличивайте этот уровень. И когда вы пишете в CSV, используйте этот уровень, чтобы узнать, сколько пустых ячеек вам нужно добавить в начале!






Ну, обычно вы не используете CSV для хранения деревьев ... CSV лучше использовать с матрицами (двухмерные массивы / таблицы). Также нам нужно посмотреть, что вы пробовали.