|
|
|
| как привести код обхода директорий (обходит нормально)
к такой нумерации записей:
$id - $dir - $pid (родитель)
1 - /Раздел 1/ - 0
2 - /Раздел 2/ - 0
3 - /Раздел 3/ - 0
4 - /Подраздел 1.1/ - 1
5 - /Подраздел 1.2/ - 1
6 - /Подраздел 2.1/ - 2
7 - /Подподраздел 1.1.1/ - 4
код
// функция построения дерева сайта - старт-директория
function parse_dir ($current_dir)
{
if ($dir = @opendir($current_dir))
{
while ($file = readdir($dir))
{
if ($file!="." && $file!=".." && $file!="Thumbs.db")
{
if (is_dir($current_dir."/".$file))
{
echo "/$file/<br>";
$newdir = $current_dir."/".$file."/";
chdir($newdir);
parse_dir($newdir);
}
else
{
$fls[] = "- $file<br>";
}
//for ($i=0; $i<=count($fls); $i++) echo $fls[$i]."<br>";
unset($fls);
}
}
chdir('..');
echo "<hr>";
closedir($dir);
}
}
parse_dir ("/");
|
| |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 12:38)
| | советов хочется, коллеги | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 14:34)
| | если я правильно понял то можно смотреть просто степень вложенности папки | |
|
|
|
|
|
|
|
для: guye
(20.03.2009 в 14:57)
| | да, верно, только запутался в нумерации рекурсии | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 14:57)
| | а просто что нибудь такое перед echo сделать $b=split(/\//,$file); $b.length | |
|
|
|
|
|
|
|
для: guye
(20.03.2009 в 15:04)
| | Простите, не понял, как это поможет правильной нумерации вложенных элементов | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 15:18)
| | есть нерабочая попытка решения и скрин, если поможет понять, что я хочу сделать | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 15:42)
| | здесь скрипт вывода дерева - http://www.activex.net.ru/docs/phpdtree.shtml
я хочу сделать обход директорий с правильной нумерацией записей
подскажите, хоть, где копать | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 16:25)
| | сделал, но рекурсия считается неверно :(
1 /раздел 1/ 0
2 /раздел 2/ 0
3 /раздел 3/ 0
4 /подраздел 3.1/ 3
4 /раздел 4/ 0 - тут ошибка первая цифра д.б. - 5 - id записи
5 /раздел 5/ 0
6 /раздел 6/ 0
7 /раздел 7/ 0
8 /подраздел 7.1/ 7
9 /подраздел 7.2/ 7
10 /подподраздел 7.2.1/ 9
11 /подподраздел 7.2.2/ 9
12 /подподраздел 7.2.3/ 9
вот код
function parse_dir ($current_dir,$id,$pid)
{
if ($dir = @opendir($current_dir))
{
while ($file = readdir($dir))
{
if ($file!="." && $file!=".." && $file!="Thumbs.db")
{
if (is_dir($current_dir."/".$file))
{
echo "$id /$file/ $pid<br>";
$newdir = $current_dir."/".$file."/";
chdir($newdir);
parse_dir($newdir,$id+1,$id++);
}
}
}
chdir('..');
closedir($dir);
}
}
parse_dir ($current_dir,1,0);
|
| |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 17:00)
| | посмотри это(извени не успел сделать что бы оно нормально работало) если что в понедельник пиши
<?php
function dir_file($papka){
if ($dir_name==$papka){$dir_name="папка с каторой стартуем";}else{$dir_name=$papka; echo "$papka--".count(preg_split ('/\//',$papka))."<br>";}
if (is_dir($dir_name)){
$dir = @opendir($dir_name);
}
$mas=array();
while (@ $file = readdir($dir)){
if ($file!="." and $file!=".."){
# echo "$file<br>";
array_push($mas,$file);
}
}
@ closedir($dir);
foreach ($mas as $file){
#echo "$file<br>";
dir_file("$dir_name/$file");
}
}
dir_file("");
?> | |
|
|
|
|
|
|
|
для: guye
(20.03.2009 в 17:23)
| | спасибо, ваш код нормально обходит директорию, но вопрос в другом
как правильно пронумировать элементы этого обхода? | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 17:44)
| | оно ?
<?php
$i=1;
$ch="";
dir_file("",$i);
function dir_file($papka,$ch){
if ($dir_name==$papka){$dir_name="папка с каторой стартуем";}else{$dir_name=$papka; echo "$papka--$ch<br>";}
if (is_dir($dir_name)){
$dir = @opendir($dir_name);
}
$mas=array();
while (@ $file = readdir($dir)){
if ($file!="." and $file!=".."){
# echo "$file<br>";
array_push($mas,$file);
}
}
@ closedir($dir);
foreach ($mas as $file){
$count_ch=count(preg_split ('/\//',"$dir_name/$file"));
#echo "$file<br>";
$mas_ch=array();
$mas_ch=preg_split('/\./',$ch);
$ch="";
for ($i_ch=0;$i_ch<$count_ch-3;$i_ch++){
$ch=$ch.$mas_ch[$i_ch].".";
}
$i+=1;
$ch=$ch.$i;
dir_file("$dir_name/$file",$ch);
}
}
?> | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 17:44)
| | оно ?и в этом -3 только если стартуешь с карнивой папки for ($i_ch=0;$i_ch<$count_ch-3;$i_ch++)
<?php
$i=1;
$ch="";
dir_file("",$i);
function dir_file($papka,$ch){
if ($dir_name==$papka){$dir_name="папка с каторой стартуем";}else{$dir_name=$papka; echo "$papka--$ch<br>";}
if (is_dir($dir_name)){
$dir = @opendir($dir_name);
}
$mas=array();
while (@ $file = readdir($dir)){
if ($file!="." and $file!=".."){
# echo "$file<br>";
array_push($mas,$file);
}
}
@ closedir($dir);
foreach ($mas as $file){
$count_ch=count(preg_split ('/\//',"$dir_name/$file"));
#echo "$file<br>";
$mas_ch=array();
$mas_ch=preg_split('/\./',$ch);
$ch="";
for ($i_ch=0;$i_ch<$count_ch-3;$i_ch++){
$ch=$ch.$mas_ch[$i_ch].".";
}
$i+=1;
$ch=$ch.$i;
dir_file("$dir_name/$file",$ch);
}
}
?> | |
|
|
|
|
|
|
|
для: Serg_l
(20.03.2009 в 17:00)
| | в таких случаях обычно применяют статическую переменную
<?
function parse($current_dir, $pid)
{
static $id;
if($pid = 0) $id = 0;
$cid = ++$id;
if ($dir = @opendir($current_dir))
{
while ($file = readdir($dir))
{
if ($file!="." && $file!=".." && $file!="Thumbs.db"
&& is_dir($current_dir."/".$file))
{
echo "$id /$file/ $pid<br>";
$newdir = $current_dir."/".$file."/";
chdir($newdir);
parse_dir($newdir,$cid);
}
}
chdir('..');
closedir($dir);
}
}
|
parse_dir ($current_dir,0);
|
| |
|
|
|