FAQ脚本帮助

时间:2011-08-14 10:08:45

标签: php

我有一个字符串,例如

 $str = "[H]Test[/H] My test string [H]Test2[/H] My second Test string"; 

我希望在“[H]”中创建一个列表,并使它们像

一样点击
<a href="#faq-1">Test</a>
<a href="#faq-2">Test2</a> 

并且还希望包含此

<a name="faq-1"></a>Test
<a name="faq-2"></a>Test2 

$str任何帮助

1 个答案:

答案 0 :(得分:1)

这就是我想出来的。

<?php

$str = "[H]Test[/H] My test string [H]Test2[/H] My second Test string";

/**
 * Helper class
 */
class FaqHelper {
    static $count = 1;
    static $listItems = array();
    static $prefix = 'faq-';

    static function GetList() {

        $items = '';
            foreach (self::$listItems as $id => $label) {
                $items .= '<li><a href="#' . self::$prefix . $id .'">' . $label . '</a></li>';
            }

        return '<ul>'. $items .'</ul>';
    }

    static function ReplaceCallback($matches)
    {
        $id = self::$count;
        $label = $matches[1];

        self::$listItems[$id] = $label;

        $res = '<span id="'. self::$prefix . $id .'">' . $label . '</span>';

        self::$count++;

        return $res;
    }
}

$text = preg_replace_callback(
    "#\[H\]([^\[]+)\[/H\]#",
    array('FaqHelper', "ReplaceCallback"),
    $str
);

$list = FaqHelper::GetList();

echo $list;
echo '<br /><br />';
echo $text;

?>