|
|
|
| Понимаю что тема избита, но все же... Имеется некоторый массив. Его нужно упорядочить и вывести деревом. Вот его код:
<?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
(
)
)
Желательно бы в коде убрать перед дополнительными массивами циферьки в кавычках (что-то никак не соображу что сделать с кодом чтобы без циферек работало). И еще необходимо сделать вывод без скобочек, описания типа массивов и т.п. ненужных символов. Т.е. нужно чтобы просто выводился текст. Помогите кто чем может... | |
|
|
|
|
|
|
|
для: Morfas
(06.09.2009 в 21:43)
| | циферьки в кавычках и вообще весь вывод здесь , это резудьтат работы
print_r($arr);
или придётся делать ещё одну такую-же рекурсивную функцию для нужного вывода
, или делать вывод внутри приведённой функции | |
|
|
|
|
|
|
|
для: heed
(07.09.2009 в 01:55)
| | а не подскажите каким образом это сдеать? | |
|
|
|
|
|
|
|
для: Morfas
(07.09.2009 в 10:23)
| | сделать именно что ? , из выше предложенного
//и такое в этом скрипте Notice: Undefined variable: level in ......... | |
|
|
|
|
|
|
|
для: heed
(07.09.2009 в 10:32)
| | Сделать чтобы не было всяких скобочек... Скрипт запускался, все нормально работает. И еще бы желательно сделать так, чтобы работало без приписки цеферек в кавычках перед вложенными массивами... | |
|
|
|
|
|
|
|
для: Morfas
(07.09.2009 в 14:42)
| | Для этого нужно написать другой скрипт. | |
|
|
|
|
|
|
|
для: 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"; | |
|
|
|