Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Здравствуйте, помогите пожауйста с деревом....
 
 автор: Morfas   (06.09.2009 в 21:43)   письмо автору
 
 

Понимаю что тема избита, но все же... Имеется некоторый массив. Его нужно упорядочить и вывести деревом. Вот его код:
<?php

     $array 
= array(
    
"1" => array("Id"=>1,"ParentId"=>0,"Atribut"=>"","Text"=>"Корневой шаблон"),
    
"2" => array("Id"=>2,"ParentId"=>1,"Atribut"=>"<%TITLE%>","Text"=>"Первый подшаблон"),
    
"3" => array("Id"=>3,"ParentId"=>1,"Atribut"=>"<%TITLE%>","Text"=>"Второй подшаблон"),
    
"4" => array("Id"=>4,"ParentId"=>2,"Atribut"=>"<%CONTENT%>","Text"=>"<B>Шаблон 4</B>"),
    
"5" => array("Id"=>5,"ParentId"=>3,"Atribut"=>"<%CONTENT%>","Text"=>"<B>Шаблон 5</B>"),
    
"6" => array("Id"=>6,"ParentId"=>2,"Atribut"=>"<%CONTENT%>","Text"=>"<B>Шаблон 6</B>"),   
    
"7" => array("Id"=>7,"ParentId"=>0,"Atribut"=>"","Text"=>"Корневой шаблон №2")
     );

function 
tree($parent) {

    global 
$array;
    
$ret = Array();
    
$found = Array();

    
    foreach(
$array as $id=>$values) {
        if(
$values['ParentId']!=$parent) continue;
        
$found[serialize($values)]=$id;
    }
    
    foreach(
$found as $seria=>$id) {
        
$values unserialize($seria);
        
$val "$values[Text]";
        
        if(
$values['Id']!=0
            
$ret[$val] = tree($id$level+1);
        else 
            
$ret[$val] = 1;
    }
//    ksort($ret);
    
return $ret;
}
$arr=tree(0);
echo 
"<pre>";
print_r($arr); 
echo 
"</pre>";

?>


Выводится все вот так:
Array
(
[Корневой шаблон] => Array
(
[Первый подшаблон] => Array
(
[Шаблон 4] => Array
(
)

[Шаблон 6] => Array
(
)

)

[Второй подшаблон] => Array
(
[Шаблон 5] => Array
(
)

)

)

[Корневой шаблон №2] => Array
(
)

)

Желательно бы в коде убрать перед дополнительными массивами циферьки в кавычках (что-то никак не соображу что сделать с кодом чтобы без циферек работало). И еще необходимо сделать вывод без скобочек, описания типа массивов и т.п. ненужных символов. Т.е. нужно чтобы просто выводился текст. Помогите кто чем может...

  Ответить  
 
 автор: heed   (07.09.2009 в 01:55)   письмо автору
 
   для: Morfas   (06.09.2009 в 21:43)
 

циферьки в кавычках и вообще весь вывод здесь , это резудьтат работы
print_r($arr);

или придётся делать ещё одну такую-же рекурсивную функцию для нужного вывода
, или делать вывод внутри приведённой функции

  Ответить  
 
 автор: Morfas   (07.09.2009 в 10:23)   письмо автору
 
   для: heed   (07.09.2009 в 01:55)
 

а не подскажите каким образом это сдеать?

  Ответить  
 
 автор: heed   (07.09.2009 в 10:32)   письмо автору
 
   для: Morfas   (07.09.2009 в 10:23)
 

сделать именно что ? , из выше предложенного

//и такое в этом скрипте Notice: Undefined variable: level in .........

  Ответить  
 
 автор: Morfas   (07.09.2009 в 14:42)   письмо автору
 
   для: heed   (07.09.2009 в 10:32)
 

Сделать чтобы не было всяких скобочек... Скрипт запускался, все нормально работает. И еще бы желательно сделать так, чтобы работало без приписки цеферек в кавычках перед вложенными массивами...

  Ответить  
 
 автор: Trianon   (07.09.2009 в 15:02)   письмо автору
 
   для: Morfas   (07.09.2009 в 14:42)
 

Для этого нужно написать другой скрипт.

  Ответить  
 
 автор: heed   (07.09.2009 в 15:24)   письмо автору
 
   для: Morfas   (07.09.2009 в 14:42)
 

способов много
<pre><?
//здесь такой-же массив $array
function rsrch_clear($prnt 0$level 0) {
    global        
$array;    
    while( list(
$k,$v) = each($array) ) {
      if (
$v['ParentId'] != $prnt) continue;     
      echo 
str_repeat("\t"$level) . $v['Id'] ."-"
        
$v['ParentId'] ."\t" $v['Atribut']
        .
"\t" $v['Text'] ."\n";
      unset(
$array[$k]);
      
rsrch_clear($v['Id'], 1+$level);
    }
    
reset($array);
}

rsrch_clear();
?><hr/><?

print_r
($array);

менять нужно там где
echo str_repeat("\t", $level) . $v['Id'] ."-"
. $v['ParentId'] ."\t" . $v['Atribut']
."\t" . $v['Text'] ."\n";

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования