«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/04/27 19:22:18  №1390215 1
image.png (18, 265x559)
559x265
image.png (9, 1626x41)
41x1626
На собеседовании не сделал одно задание, подобное которому когда-то пытался сделать, но были проблемы.
Есть многомерный массив папок и файлов, вложенных в папки, пустые папки, либо просто файлы в корне.
$folders=array("Папка А"=>array("Папка B"=>array(), "Папка C"=>array("Файл 1", "Файл 2", "Файл 3"), "Файл 10", "Файл 11", "Файл 12"), "Файл 20", "Файл 21", "Файл 22", "Папка G"=>array());

Нужно вывести деревом как на пикрилейтед 1 с помощью функции рекурсии.

Проблемы возникают в том, что массив "Папка A" считается как ассоциативный и не идёт ключём [0], к примеру, в итоге возникают сложности с форичем. Пикрил 2.

Для начала пытался без рекурсии вывести. Более менее работает такой код, но по-ебаному совсем.

foreach ($folders as $key=>$value){
echo "$key - $value<br>";
if(is_array($value)&&count($value)>0) {
foreach ($value as $tmp=>$key2){
echo "$tmp - $key2<br>";
if(is_array($key2)&&count($key2)>0){
foreach ($key2 as $tmp2=>$key3){
echo "$tmp2 - $key3 <br>";
}
}
}
}
}
Ответы: >>1390217 >>1390238 >>1390358
Аноним 2019/04/27 19:24:42  №1390217 2
Аноним 2019/04/27 20:03:33  №1390238 3
>>1390215

Это решается элементарно. Обходим массив, если значение элемента это строка, то перед нами файл. Если значение - это массив - то перед нами папка, вызываем себя рекурсивно для вывода содержимого папки с отступом.

Если тебе не нравится рекурсия, можно сделать без нее, например используя стек, но будет в разы корявее.

Твой код никуда не годится, так как в нем заложена фиксированная глубина вложенности.
Ответы: >>1390365
Аноним 2019/04/27 22:23:07  №1390358 4
>>1390215
https://ideone.com/xFFy4I
А ты не рано по вакансиям ходить начал?
Рекурсия это штука из основ проганья.
Ответы: >>1390365
Аноним 2019/04/27 22:39:20  №1390365 5
>>1390238
Спасибо.
>>1390358
Да я уже успел поработать немного. Рекурсию я знаю, проблема была с деревом этим.
Что у тебя в $de должно идти в функцию?
Ответы: >>1390366
Аноним 2019/04/27 22:45:48  №1390366 6
>>1390365
>Что у тебя в $de должно идти в функцию?
Глубина рекурсии.