将字符串中的变量作为参数传递

问题描述:

我有一种情况,在我对它们执行操作之前,我想检查大量字符串是否为空。我不希望有执行上手动每一个字符串这张支票,所以我把它看起来像这样的功能:将字符串中的变量作为参数传递

function format_field($field_name, $format) { 
    $value = get_field($field_name); 
    if ($value != "") { 
    return $format; 
    } 
    return ""; 
} 

这个函数的调用看起来是这样的:

format_field('website', "<p><strong>Website:</strong><a href=\"$value\">$value</a></p>"); 

我希望通过在传递给format_field()的字符串中写入$value$value的值将在函数返回前在函数中扩展,但似乎并非如此。

这是否可能,我只是错了?

我也知道关于sprintf(),但由于$value可以在字符串中多次引用,所以它不太理想。

+0

那你所要的输出是什么?如果'网站'中有一个字符串,你想要它说''网站:something“'或完全忽略整个输出? – Andy

+0

函数内部的变量'$ value'与调用函数的代码中的变量不同。阅读更多关于[变量范围](http://php.net/manual/en/language.variables.scope.php)。 – axiac

+0

尝试仅将'$ value'作为第二个参数传递给'format_field(arg1,arg2)',然后在返回之前在函数中处理它,当然可以将'get_field()'函数作为@安迪在 –

您的代码存在的问题是,当通过"<p><strong>Website:</strong><a href=\"$value\">$value</a></p>"作为函数参数时,$value变量不会在功能块的稍后被替换。

因此,举例来说,如果你有$value = 'https://a.b.c';$format值变为"<p><strong>Website:</strong><a href=\"https://a.b.c\">https://a.b.c</a></p>"

你可以尝试什么,是替代一个占位符,例如

"<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>"$format参数,然后使用类似的东西:

$format = "<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>";

$value = 'https://www.google.com';

echo preg_replace('#\{value\}#i', $value, $format);

实际上返回:<p><strong>Website:</strong><a href="https://www.google.com">https://www.google.com</a></p>

+0

谢谢你,我跟着去了。我希望我可以使用变量名称,因为这对任何人来说都是显而易见的,但是只要替换值就可以正常工作。 – Alex