вывод дерева при редактировании

ivan52

d-i-d grafix
вывод дерева при редактировании

есть дерево категорий
есть функция которая строит его
PHP:
function categories_tree1($clevel)
{
$output = $orders_query;
if ($clevel < 20) {
$output = categories_tree1($clevel+1);
}
return $output;
}
структура таблицы простая cat_id | parent_id | name

при редактировании конкретной категории пытаюсь сделать так, чтобы она не отображалась в дереве и соответсвенно все категории которые под ней, чтобы человек не мог положить категорию саму в себя

не понимаю как реализовать?
 

kruglov

Новичок
а что именно непонятно? как сравнить id выводимой ветки с id редактируемой?
 

ivan52

d-i-d grafix
to kruglov нет это понятно
дело именно в том, что нужно сравнивать не только это ай-ди но и ай-ди всех подветок, которые могут быть у этой ветки
и их не показывать!

нужно ли помещать все дерево в массив? и потом сравнивать?
нужно ли проставлять дополнительные элементы в массиве?
или можно это реализовать с помощью запроса

-~{}~ 07.08.05 15:07:

проблема именно с наличием подветок

-~{}~ 07.08.05 16:21:

просто при сравнении удается например только скрыть саму ветку редактируемую и ветки для которой она является прямым родителем (если ветки еще есть более глубоко, то они отображаются!)

-~{}~ 07.08.05 22:37:

дошел до того что вероятно надо сделать два массива и сравнить их между собой
но пробуя использовать функции array_diff_assoc, array_diff_key не получается ничего!

может кто-то подскажет как сравнить два массива
оставив только то, что несовпадает в них

массивы имеют такой вид

array(11) { [21]=> string(8) "Products" [22]=> string(6) "Shawls" [23]=> string(7) "Scarves" [26]=> string(11) "Accessories" [91]=> string(5) "ivan0" [92]=> string(24) " irina0" [93]=> string(43) " nikita0" [94]=> string(58) " eva0" [100]=> string(78) " maybe0" [98]=> string(5) "ivan1" [99]=> string(24) " irina1" }
--------------------------------------------------------------------------------
array(5) { [91]=> string(5) "ivan0" [92]=> string(6) "irina0" [93]=> string(25) " nikita0" [94]=> string(40) " eva0" [100]=> string(60) " maybe0" }
 

kruglov

Новичок
PHP:
function categories_tree1($clevel, $current) 
{ 
$output = $orders_query; 
if($output['id']==$current) return; // <--
if ($clevel < 20) { 
$output = categories_tree1($clevel+1); 
} 
return $output; 
}
 

ivan52

d-i-d grafix
можно ли немного пояснить
что такое куррент?

-~{}~ 07.08.05 22:50:

и что такое if($output['id']==$current) return; // <--

-~{}~ 08.08.05 00:56:

нашел выход!
сделал два массива
и потом с помощью

foreach($cat_id1 as $id => $text) {
unset($cat_id[$id]);
}

удалил ненужное
осталось теперь только прочитать исправленный массив и все
тема закрыта
спасибо
 

kruglov

Новичок
куррент - по английски "текущий".
если id выбираемой ветки == текущей (которую мы редактируем и не выводим), то ничего не делаем (переходим дальше). Т.е. и не спускаемся к потомкам этой ветки.

p. s. выбрать из базы все, а потом удалить оттуда ненужное - это несколько неоптимальное решение, не думаете? Если можно сразу выбрать то, что нужно.
 
Сверху