将一个变量$var添加到另一个变量$var中

3

我是php的新手,但我需要修改一些字符串,以便在可视化构建器shortcode中添加有rel属性的链接和动画图标。问题在于,这个变量默认情况下只能添加两个变量,而我需要添加更多。

以下是原始代码:

$svg_icon = '<div class="svg-icon-holder" data-size="'. $icon_size . '" data-animation-speed="'.$animation_speed_time.'" data-animation="'.$enable_animation.'" data-animation-delay="'.$animation_delay.'" data-color="'.strtolower($color) .'"><span>'. get_template_directory_uri() . '/css/fonts/svg/' . $image .'</span></div>';

问题在于:我需要在代码中在<div>标签之前插入一个<a href="'. $icon_link . '" rel="'. $icon_link_rel .'">,并在关闭div后插入</a>,但仅当变量&icon_link被设置时才需要出现<a>标签,如果没有设置,不需要所有图标都有链接。

希望我表述清楚了,如果有问题,请让我知道!

此致,Alin。


2
为什么不编写一个 if 语句来检查该条件,然后重新排列 HTML 标记呢? - rst
4个回答

3
如果$icon_link被定义并设置,那么使用点号(.)将你的<a>标签添加到$svg_icon变量中,进行一次if-语句处理。
 $svg_icon = '<div class="svg-icon-holder" data-size="'. $icon_size . '" data-animation-speed="'.$animation_speed_time.'" data-animation="'.$enable_animation.'" data-animation-delay="'.$animation_delay.'" data-color="'.strtolower($color) .'"><span>'. get_template_directory_uri() . '/css/fonts/svg/' . $image .'</span></div>';
 if($icon_link)
  {
      $svg_icon = '<a href="'. $icon_link . '" rel="'. $icon_link_rel .'">'.
                  $svg_icon.'</a>';
  }

你能否解释一下为什么你要给我点踩?这可以帮助我改进我的回答。 - Luthando Ntsekwa
你好!谢谢你的回答,这对我很有帮助,看起来也是最简单的方法!还有其他人能告诉我这段代码是否优秀吗? - Alin Ionescu
@AlinIonescu 很高兴我能帮到你。如果这个答案解决了你的问题,请点击勾选标记为已接受。这将向更广泛的社区表明你已经找到了解决方案,并为回答者和你自己赢得了一些声誉。 - Luthando Ntsekwa

1

只需使用if语句。由于您正在操作字符串,因此可以轻松地将单词添加到另一个字符串中,例如:

if ($icon_link){
    $beginning = "<a href='$icon_link' rel='$icon_link_rel'>";
    $ending = "</a>"
}
else {
    $beginning = "";
    $ending = ""
}
$svg_icon = "$beginning<div class='svg-icon-holder' data-size='$icon_size' data-animation-speed='$animation_speed_time' data-animation='$enable_animation' data-animation-delay='$animation_delay' data-color='".strtolower($color)."'>
<span>".get_template_directory_uri()."/css/fonts/svg/$image</span></div>$ending";

闭合标签 </a> 在哪里? - Meneer Venus
现在它看起来像一团糟。我认为LuthandoLoot提供了一个更好的答案。 - Meneer Venus
我们同时发布了,他的更好,我从未说过相反的话! - Hearner

0

个人而言,我更喜欢使用sprintf格式化字符串,而不是使用点将字符串粘合在一起。您可以仅使用<div>标签使用sprintf$svg_icon字符串组合在一起。之后,如果定义了$icon_link,只需在$svg_icon周围包装一个<a>标签即可:

$svg_icon_format = '<div class="svg-icon-holder" data-size="%d" data-animation-speed="%d" data-animation="%d" data-animation-delay="%d" data-color="%d"><span>%s</span></div>';

$values = array(..enter values here..);

$svg_icon = sprintf($svg_icon_format,$values);

if(isset($icon_link) && isset($icon_link_rel)) {
    $svg_icon = sprintf('<a href="%s" rel="%s">%s</a>',$icon_link,$svg_icon,$icon_link_rel);
}

免责声明:此代码未经测试。请查看我提供的sprintf文档并尝试自己编写代码。


-1
首先,不要将所有内容都写在一行上,以便适应 SO(也许还有您的代码)屏幕大小。
其次,我建议使用内嵌变量。在 PHP 中,您可以使用单引号,其中您的字符串按原样使用,或者您可以使用双引号,在其中可以使用变量。如 echo "嘿,我的名字是 $name"; 这里的 $name 将会被变量的值所替换。如果您需要在字符串中使用双引号,则可以使用反斜杠进行转义,例如 \" 第三,您可以使用内联 if-else,语法如下:$str = boolean ? "如果为真则为该字符串" : "如果为假则为该字符串"
$svg_icon = isset($icon_link) ? "<a href=\"$icon_link\"
    rel=\"$icon_link_rel\">" : '' . //add your opening <a> if needed
    "<div class=\"svg-icon-holder\" 
    data-size=\"$icon_size\" data-animation-speed=\"$animation_speed_time\"
    data-animation=\"$enable_animation\" 
    data-animation-delay=\"$animation_delay\"
    data-color=\"strtolower($color) \"><span>" 
    . get_template_directory_uri()
    . "/css/fonts/svg/ $image </span></div>"
    . isset($icon_link) ? '<\a>' : ''; //add your closing <\a> if needed

1
你告诉他不要把所有东西都写在一行,但是你却用内联if语句把所有东西都放在一行中给了他一个答案... - Meneer Venus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接