Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не получается сделать массив хэши 
V
    Опции темы
gcc
Дата 18.4.2009, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



есть код
(закоментируемый код оставил, чтобы бло видно как я делал)
Код

                  my @loop_data_tree;
            my $loop_data_tree;

            if ( $loop_data2->{id_se} != 1 ) {

                my @head = ();

                my $index = 0;
                while (1) {
                    my $sth = $dbh->prepare( "
        SELECT parent_se_id,
                 id_se,
                 name_se
        FROM section
        WHERE id_se = ?
        LIMIT 1
      " );

                    my $sqle;

                    if ( $head[$#head] ) {
                        $sqle = $head[$#head];
                    }
                    else {
                        $sqle = $loop_data2->{id_se};
                    }

                    $sth->execute($sqle);

                    my $loop = $sth->fetchrow_hashref();
                    $sth->finish();

                    #           @{$loop_data_tree}, map {}
                    #for my $value (@array) {
                    #    push(@array_for_template, {value => $value});
                    #}
                    while ( my ( $key, $value ) = each( %{$loop} ) ) {

                        if ( $key eq 'name_se' ) {
                            $value = ' --> ' . $value;
                        }
                        $index++;

                         $loop_data_tree[$index]{$key} = $value;

                        # push @{$loop_data_tree}, $key => $value);

                    }

            #       @loop_data_tree = map +{ $_ => $loop->{$_} }, keys %{$loop};
            # push @{$loop_data_tree}, $loop while $loop;

                    push @head, $loop->{parent_se_id};

                    last if ( $head[$#head] eq '1' );

                }

                # @{$loop_data_tree} = reverse @{$loop_data_tree};

                $c->stash->{data_tree} = \@loop_data_tree;

                # use Data::Dumper;

                # print Dumper(\@loop_data_tree)

            }



выводи один раз, то есть цыкла нету!
Код

--> упвап ва п 19 --> vbbn2 13 


я не правильно делаю через цыкл?
как тут сделать?

HTML
Код

    <tr>    
       <td align="left" colspan="3">          
<TMPL_LOOP NAME="data_tree"><a class="hilightoff" onmouseover="className='hilighton'; this.style.cursor='hand';" 
onmouseout="className='hilightoff';" target="_top" href="/view_section/<TMPL_VAR NAME="id_se">">  <TMPL_VAR NAME="name_se"> </a>
 </TMPL_LOOP>
      </td>
  </tr>
   

    <tr>    
       <td align="left" colspan="3">          
 <TMPL_LOOP NAME="data_tree"> <TMPL_VAR NAME="id_se">  <TMPL_VAR NAME="name_se">  </TMPL_LOOP>
      </td>
  </tr>



отладка
Код

$VAR1 = [
          undef,
          {
            'parent_se_id' => '13'
          },
          {
            'name_se' => ' --> упвап ва п'
          },
          {
            'id_se' => '19'
          },
          {
            'parent_se_id' => '1'
          },
          {
            'name_se' => ' --> vbbn2'
          },
          {
            'id_se' => '13'
          }
        ];



Это сообщение отредактировал(а) gcc - 18.4.2009, 23:33
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 18.4.2009, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



точнее аномалия какая-то

я поставил 
Код

    <tr>    
       <td align="left" colspan="3">          
 <TMPL_LOOP NAME="data_tree"> <TMPL_VAR NAME="id_se">  <TMPL_VAR NAME="name_se"> 
 </TMPL_LOOP>
      </td>
  </tr>


выдает 
Код

13 --> vbbn2 19 --> упвап ва п


а если поставить ссылку, то id_se не выдвет
Код

    <tr>    
       <td align="left" colspan="3">          
 <TMPL_LOOP NAME="data_tree"> <a  href="/view_section/<TMPL_VAR NAME="id_se">">  <TMPL_VAR NAME="name_se"> </a> 
 </TMPL_LOOP>
      </td>
  </tr>


что за прикол? или я туплю?

я поставил   push @{$loop_data_tree}, $key => $value); вместо  $loop_data_tree[$index]{$key} = $value;
сейчас отладка нормальная

Код

$VAR1 = [
          {
            'id_se' => '13'
          },
          {
            'name_se' => ' --> vbbn2'
          },
          {
            'parent_se_id' => '1'
          },
          {
            'id_se' => '19'
          },
          {
            'name_se' => ' --> упвап ва п'
          },
          {
            'parent_se_id' => '13'
          }
        ];


PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 18.4.2009, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



оно не правильно заносит в массив эти хэши, там есть пустые эелементы... не знаю что тут надо сделать
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 18.4.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



gcc, для Вас есть несколько рекомендаций:

1. форматируйте код: те фрагменты, которые Вы приводите читать очень неудобно. В этом сильно поможет perltidy (у меня он обрабатывает выделенный в редакторе блок кода).
2.  $head[$#head] можно заменить на $head[-1], правда это ни на что не влияет  smile 
3. цикл обработки хэша, полученного из БД заменить на
Код

$loop->{name_se} .= ' --> ' . $loop->{name_se};
push(@{$loop_data_tree}, $loop);




--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
vadiml
Дата 18.4.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



gcc

Позвольте Вам посоветовать почитать начало книги "Perl Best Practices", автор Damian Conway.
А то просто разобраться в Вашем коде не скопировав в редактор и не приведя его в порядок трудновато, что отбивает желание разбираться в этом коде.

PM MAIL Jabber   Вверх
gcc
Дата 18.4.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



fixed

Добавлено @ 23:34
perltidy

но там проблема где-то в алгоритме, оно "заноситься" в массив как-то криво, потом криво показывается через шаблон... странно...

Это сообщение отредактировал(а) gcc - 18.4.2009, 23:40
PM WWW ICQ Skype GTalk Jabber   Вверх
tolkien
Дата 19.4.2009, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Цитата(gcc @ 18.4.2009,  06:22)
...
что за прикол? или я туплю?

я поставил   push @{$loop_data_tree}, $key => $value); вместо  $loop_data_tree[$index]{$key} = $value;
сейчас отладка нормальная
...

$loop_data_tree[$index]{$key} = $value; попробуйте переписать так
$loop_data_tree->[$index]->{$key} = $value; 
PM MAIL   Вверх
gcc
Дата 19.4.2009, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(tolkien @ 19.4.2009,  01:31)
$loop_data_tree[$index]{$key} = $value; попробуйте переписать так
$loop_data_tree->[$index]->{$key} = $value;

не сработало, там странная проблема я зыбл, тогда когда проходит через 2 цыкла стразу

Добавлено через 1 минуту и 7 секунд
Цитата(ginnie @ 18.4.2009,  09:44)
Код

$loop->{name_se} .= ' --> ' . $loop->{name_se};
push(@{$loop_data_tree}, $loop);

РАБОТАЕТ, я забыл там в прошлый раз такая же проблема была когда 2 раза через цыкл пройтись
PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.