本帖最后由 yunxingfeng 于 2012-09-05 17:11:25 编辑

解决方案 »

  1.   

    根据\n|#拆分百度#http://www.baidu.com/\n百度#http://www.baidu.com/\n得到的替换<a href='{1}'>{0}</a>,输出
      

  2.   

    $s = "百度#http://www.baidu.com/\n百度#http://www.baidu.com/\n";
    if (preg_match_all('/(.+)#(.+)/', $s, $matches, PREG_SET_ORDER)) {
        foreach($matches as $k => $v)
        {
            echo "<a href=\"$v[2]\">$v[1]</a>";
        }
    }
      

  3.   

    <a href=\"$v[2]\">$v[1]</a>
    这个字符串是作为参数的,格式不固定,要求能够根据“带大括号的数组索引”调用相应的元素
    如果这个字符串定义为
    <li>$v[1]<a href=\"$v[2]\">查看</a></li>
    那么就应该显示
    <li>百度<a href="http://www.baidu.com">查看</a></li>
    <li>百度<a href="http://www.baidu.com">查看</a></li>
      

  4.   

    错了应该是定义为
    <li>{2}<a href="{1}">查看</a></li>
      

  5.   

    这样写split_array("百度#http://www.baidu.com/\n百度#http://www.baidu.com/\n","\n|#","<a href='{1}'>{0}</a>");function split_array($str, $pattern, $template) {
      $cnt = substr_count($template, '{'); //统计模板中替换位置的个数
      $tmp = preg_split('/'.$pattern.'/', $str, -1, PREG_SPLIT_NO_EMPTY); //按规则切割数据
      $m = count($tmp) % $cnt;
      if($m) $tmp = array_slice($tmp, 0, -$m); //除去多余的数据
      $tmp = array_chunk($tmp, $cnt); //将数据分组
      $r = array();
      foreach($tmp as $m) {
        $t = $template;
        foreach($m as $i=>$v) {
          $t = str_replace("{{$i}}", $v, $t);
        }
        $r[] = $t;
      }
      echo join('<br>', $r);
    }<a href='http://www.baidu.com/'>百度</a><br><a href='http://www.baidu.com/'>百度</a>优化的余地应该很大,自己弄弄吧