我有一个爆炸问题,我的代码:
$the_genre = 'Drame, Action, Comédie';
$genre_explode = explode(',', $the_genre);
$sep = '';
foreach($genre_explode as $genre)
{
$genre = str_replace(' ', '', $genre);
$genre .= $sep.'<a href="/genre/'.$genre.'/">'.$genre.'</a>';
$sep = ', ';
}
echo $genre;
我有这个:
Comédie, <a href="/genre/Comédie/">Comédie</a>
我想要这个:
<a href="/genre/Drame/">Drame</a>, <a href="/genre/Action/">Action</a>, <a href="/genre/Comédie/">Comédie</a>
您在错误的地方回显。将echo语句移动到循环中:
foreach($genre_explode as $genre)
{
$genre = str_replace(' ', '', $genre);
$genre .= $sep.'<a href="/genre/'.$genre.'/">'.$genre.'</a>';
$sep = ', ';
echo $genre;
}
这将返回:
Drame<a href="/genre/Drame/">Drame</a>Action, <a href="/genre/Action/">Action</a>Comédie, <a href="/genre/Comédie/">Comédie</a>
如果在循环外进行回声,则只会得到$genre
的最后值。以下是的工作示例
编辑-附加信息
代替str_replace()
,您也可以使用trim()
:
$genre = trim($genre);
您正在连接循环中分配的变量,因此结果只输出数组的最后一个元素。你可以使用这个代码来实现你想要的:
$the_genre = 'Drame, Action, Comédie';
$genre_explode = explode(',', $the_genre);
$out = '';
foreach($genre_explode as $genre)
{
$genre = trim($genre);
$out .= '<a href="/genre/'.$genre.'/">'.$genre.'</a>, ';
}
echo $out;
只需避免所有爆炸、循环和串联。使用preg_replace()
将每个单词转换为所需的超链接标记。
代码:(演示)
$the_genre = 'Drame, Action, Comédie';
echo preg_replace(
'/'pL+/u',
'<a href="/genre/$0/">$0</a>',
$the_genre
);
输出:
<a href="/genre/Drame/">Drame</a>, <a href="/genre/Action/">Action</a>, <a href="/genre/Comédie/">Comédie</a>