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

Тема в разделе "PHP", создана пользователем indigobull, 9 мар 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. indigobull

    indigobull Создатель

    Регистр.:
    26 июл 2009
    Сообщения:
    33
    Симпатии:
    14
    генерация массива происходит тут:
    PHP:
       for ($m=0$m count($menu); $m++) {
          
    $keys=array_keys($menu[$m]);
          for (
    $div=0$div count($keys); $div++) {
             for (
    $i=0$i count($menu[$m][$keys[$div]]); $i++)
             
    $menu[$m][$keys[$div]][$i]=build_link($menu[$m][$keys[$div]][$i]);
             
    $menu[$m][$keys[$div]]=implode("\n",$menu[$m][$keys[$div]]);
             
    $menu[$m][$keys[$div]]=
             ((
    $m==0) ? "\n<div class=\"topmenu\">\n""\n\n").
             ((
    strlen($keys[$div]) > and $m 0) ? "<br>".$keys[$div]."\n""").
             ((
    strlen($menu[$m][$keys[$div]]) > 10) ? $menu[$m][$keys[$div]]: "")."\n\n";
          }
          
    $menu[$m]=implode("",array_values($menu[$m]));
          
    $menu[$m]=(stristr($menu[$m],"<a href=")) ? preg_replace("/[ +]/is"," ",$menu[$m]): "";
       }
    а формирование ссылки:
    PHP:
    function build_link($arr) {
       global 
    $turl;
       
    $a=aray($arr)
       
    $i=0$i count($a[0]); $i++;
       if (!
    is_array($arr) or count($arr)!=3) return "";
       list (
    $lnk,$ttl,$alt)=$arr;
       
    $tmp=explode(" ",$lnk);
       
    $lnk=array_shift($tmp);
       
    $lnk=str_replace(array("'","\""),"",$lnk);
       
    $tmp=implode(" ",$tmp);
       return (
    stristr($lnk,"http://") or stristr($lnk,"https://") or stristr($lnk,"mailto:")) ?
          
    "<div><a href=\"$lnk\" title=\"$ttl\" target=\"_blank\" $tmp>$alt </a></div>":
          
    "<div><a href=\"$turl/$lnk\" title=\"$ttl\" $tmp>$alt </a></div>";
    }
    хочется получить на выходе ссылку, у которой в теге <div> стоял id, соответствующий порядковому номеру этой ссылки, то есть:
    PHP:
    <div id=1><a href=траляля title=траляля target=_blank>траляля</a></div>
    <
    div id=2><a href=траляля title=траляля target=_blank>траляля</a></div>
    ...
    как правильно написать такой счетчик и куда его вставить?
     
  2. GrizliK

    GrizliK Создатель

    Регистр.:
    4 сен 2009
    Сообщения:
    47
    Симпатии:
    3
    PHP:
    function build_link($arr$counter) { 
       global 
    $turl
       
    $a=aray($arr
       
    $i=0$i count($a[0]); $i++; 
       if (!
    is_array($arr) or count($arr)!=3) return ""
       list (
    $lnk,$ttl,$alt)=$arr
       
    $tmp=explode(" ",$lnk); 
       
    $lnk=array_shift($tmp); 
       
    $lnk=str_replace(array("'","\""),"",$lnk); 
       
    $tmp=implode(" ",$tmp); 
       return (
    stristr($lnk,"http://") or stristr($lnk,"https://") or stristr($lnk,"mailto:")) ? 
          
    "<div id='$counter'><a href=\"$lnk\" title=\"$ttl\" target=\"_blank\" $tmp>$alt </a></div>"
          
    "<div id='$counter'><a href=\"$turl/$lnk\" title=\"$ttl\" $tmp>$alt </a></div>"
    }  

    for (
    $m=0$m count($menu); $m++) { 
          
    $keys=array_keys($menu[$m]); 
          for (
    $div=0$div count($keys); $div++) { 
             for (
    $i=0$i count($menu[$m][$keys[$div]]); $i++)
                
    $menu[$m][$keys[$div]][$i]=build_link($menu[$m][$keys[$div]][$i], $i+$div); 
             
    $menu[$m][$keys[$div]]=implode("\n",$menu[$m][$keys[$div]]); 
             
    $menu[$m][$keys[$div]]= 
             ((
    $m==0) ? "\n<div class=\"topmenu\">\n""\n\n"). 
             ((
    strlen($keys[$div]) > and $m 0) ? "<br>".$keys[$div]."\n"""). 
             ((
    strlen($menu[$m][$keys[$div]]) > 10) ? $menu[$m][$keys[$div]]: "")."\n\n"
          } 
          
    $menu[$m]=implode("",array_values($menu[$m])); 
          
    $menu[$m]=(stristr($menu[$m],"<a href=")) ? preg_replace("/[ +]/is"," ",$menu[$m]): ""
       }  
    :)
     
  3. indigobull

    indigobull Создатель

    Регистр.:
    26 июл 2009
    Сообщения:
    33
    Симпатии:
    14

    73 строка - это:
    PHP:
         "<div id='$counter'><a href=\"$turl/$lnk\" title=\"$ttl\" $tmp>$alt </a></div>";  
     
  4. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    indigobull, как вариант я бы сделал так:
    перед вызовом функций
    PHP:
    $counter 0;
    в функции build_link начало вот так
    PHP:
    function build_link($arr) { 
       global 
    $turl,$counter;
    и перед концом этой функции
    PHP:
    ++$counter;
    return (
    stristr($lnk,"http://") or stristr($lnk,"https://") or stristr($lnk,"mailto:")) ? 
          
    "<div id='$counter'><a href=\"$lnk\" title=\"$ttl\" target=\"_blank\" $tmp>$alt </a></div>"
          
    "<div id='$counter'><a href=\"$turl/$lnk\" title=\"$ttl\" $tmp>$alt </a></div>"
    }   
    Т.е. просто добавляется глобальная переменная которая перед каждым возвратом ссылки увеличивается на 1.
     
    indigobull нравится это.
Статус темы:
Закрыта.