"Чистота" кода

Profic

just Profic (PHP5 BetaTeam)
1. странный тем, что непонятно зачем там xpath, если можно просто пройтись по дереву, хотя в общем-то с xpath наглядней
2. и 3. а ты попробуй сделать в точности как я сказал и увидишь повтор, а там глядишь и поймешь зачем.
 

Ilya

Новичок
если поменять все $space на $drevo переменная $drevo будет обнулятся...

?
 

sergadm

Новичок
жаль, что писатели всяких смс это форум не читают. ставил смал-нюке на локале бог ты мой сколько там нотисов сыпится
 

Ilya

Новичок
не помогло :(
переменная сохраняется на каждом вызове и в результате вывод рекурсии получается сумасшедший :(
блин я хз че делать :(
 

Profic

just Profic (PHP5 BetaTeam)
Ilya
1) Думаем головой
2) Думаем головой еще раз
3) Думаем головой еще много-много раз :)
4) ДЕЛАЕМ (а не теоретизируем) то что я написал
5) Думаем, можно головой :)

ЗЫ. Ты хоть понимаешь, что такое рекурсия? И как она работает в ТВОЕМ (или это обычный copy/paste откуда-нить?) скрипте. Или ты сам писал его НЕ ПОНИМАЯ, что пишешь. В таком случае я могу только развести руками и послать тебя в гугль почитать про "рекусию в программировании".
ЗЫЫ. ДА, твоя долбанутая переменная $drevo БУДЕТ ИНИЦИАЛИЗИРОВАТЬСЯ ОБНУЛЕНИЕМ, но разве не именно это ТЕБЕ БЫЛО НУЖНО?
 

Ilya

Новичок
Profic, я думал и пробовал твои варианты...
спасибо, в принципе ты помог, да мне надо было обнуление, но как предлагали static не сработало, нашел вариант
вставить такую строчку в начале скрипта
Код:
if( $drevo != "" ) $drevo = "";
и передаю $drevo как параметр функции каждый раз :)

изврат, но работает :)

скрипт мой :)
из готовых вещей в своих разработках использую только htmlArea :) но это даже к php не относится.
 

Profic

just Profic (PHP5 BetaTeam)
Ilya
Зачем static, ты можешь ТУПО СДЕЛАТЬ, то что я говорю? Если силенок не хватает, то так уж и быть сделаю за тебя.
PHP:
function rekurs_tree ($xml, $parent, $xpath, $num) {
    $drevo = '';
    $nodes = $xml->xpath_eval ($parent, $xpath);
    for ($i = 1; $i < sizeof ($nodes) + 1; $i++) {
        $query = $xpath . "[position() = $i]/name_ru";
        $query_a = $xpath . "[position() = $i]/node";
        $n_cont = $xml->xpath_eval ($parent, $query);

        $drevo .= str_repeat ('&nbsp;&nbsp;', $num);
        $drevo .= convert ($xml->get_content ($n_cont[0])) . '<br>';

        $nodes_a = $xml->xpath_eval ($parent, $query_a);
        if (sizeof ($nodes_a) != 0) {
            $drevo .= rekurs_tree ($xml, $parent, $query_a, $num + 1);
        }
    }
    return $drevo;
}
И только не говори, что оно не работает или не понимаешь как оно работает.
 

Ilya

Новичок
Profic, не нервничай...
я пробовал твои примеры.
если бы они сработали я бы больше не писал.

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

решил хоть и не самым лучшим способом, но решил, и сейчас думать как сделать лучше времени нет, надо делать проект дальше.
потом задумаюсь над оптимизацией.
спасибо.
 

Kapacb

Новичок
Ilya
решил хоть и не самым лучшим способом, но решил, и сейчас думать как сделать лучше времени нет, надо делать проект дальше.
потом задумаюсь над оптимизацией.
спасибо.
Нет ничего более постоянного чем это временное, так что с оптимизацией лучше не затягивать.
 

Profic

just Profic (PHP5 BetaTeam)
код, который ты написал в выше работает неправильно, выдаются нотайсы и дерево строится неправильно..
гы-гы-гы.
1. Нотайсы там могут быть только от xml-функций. Ибо тот один нотайс, который я поправил при этом коде не должно никогда выдаваться.
2. Если он работает неправильно, значит и у тебя в оригинале он работал неправильно.
 

Ilya

Новичок
Автор оригинала: Profic
2. Если он работает неправильно, значит и у тебя в оригинале он работал неправильно.
блин, Profic, говорю же успокойся, спасибо.... :)
я разобрался примерно

вот если хочешь рабочий код:

PHP:
  function rekurs_tree( $xml, $parent, $xpath, $num, $drevo ) {

           if( $drevo != "" ) $drevo = "";

           $num++;

           $nodes = $xml->xpath_eval( $parent , $xpath );
           for( $i = 1; $i < sizeof( $nodes ) + 1; $i++ ):


                $space = "";

                $query = $xpath . "[ position() = $i ]/name_ru";
                $query_a = $xpath . "[ position() = $i]/node";
                $n_cont = $xml->xpath_eval( $parent, $query );

                $query_par = $xpath . "[ position() = $i ]/id";
                $par_cont  = $xml->xpath_eval( $parent, $query_par );
                $par = convert( $xml->get_content( $par_cont[0] ) );

                for( $j = 0; $j < $num; $j++ ):
                     $space .= "&nbsp;&nbsp;";
                endfor;
                $drevo .= $space;
                $drevo .= "<a target=\"cont\" href=\"cont.php?id=$par\" class=\"menu\">";
                $drevo .= convert( $xml->get_content( $n_cont[0] ) ) . "</a><hr>";

                $nodes_a = $xml->xpath_eval( $parent , $query_a );
                if( sizeof( $nodes_a ) != 0 ):
                    $drevo .= rekurs_tree( $xml, $parent, $query_a, $num, $drevo );
                endif;
           endfor;
           return $drevo;


  }

твой совет заменить цикл на str_repeat() я принял, спасибо..
но займусь поправкой уже потом, т.к. сейчас делаю другой модуль, отрываться нехочется :)

еще раз спасибо
 
Сверху