我有以下变量:
$argument = 'blue widget';
我传递了以下函数:
widgets($argument);
小部件功能中有两个变量:
$price = '5';
$demand ='low';
我的问题是如何执行以下操作:
$argument = 'blue widget'.$price.' a bunch of other text';
widgets($argument);
//now have function output argument with the $price variable inserted where I wanted.
有什么声音可以做到这一点,还是我需要重新考虑我的设计?
答案 0 :(得分:5)
在我的头顶,有两种方法可以做到这一点:
传递两个参数
widget($initText, $finalText) {
echo $initText . $price . $finalText;
}
使用占位符
$placeholder = "blue widget {price} a bunch of other text";
widget($placeholder);
function widget($placeholder) {
echo str_replace('{price}',$price,$placeholder);
}
// within the function, use str_replace
以下是一个示例:http://codepad.org/Tme2Blu8
答案 1 :(得分:3)
使用某种占位符,然后在函数中替换它:
widgets('blue widget ##price## a bunch of other text');
function widgets($argument) {
$price = '5';
$demand = 'low';
$argument = str_replace('##price##', $price, $argument);
}
在此处查看:[{3}}
答案 2 :(得分:2)
为您的变量创建一个占位符,如下所示:
$argument = 'blue widget :price a bunch of other text';
在widget()
函数中,使用字典数组和str_replace()
来获取结果字符串:
function widgets($argument) {
$dict = array(
':price' => '20',
':demand' => 'low',
);
$argument = str_replace(array_keys($dict), array_values($dict), $argument);
}
答案 3 :(得分:2)
我会鼓励preg_replace_callback
。通过使用此方法,我们可以轻松地将捕获的值用作查找,以确定其替换应该是什么。如果我们遇到一个无效的密钥,也许是拼写错误的原因,我们也可以对此作出回应。
// This will be called for every match ( $m represents the match )
function replacer ( $m ) {
// Construct our array of replacements
$data = array( "price" => 5, "demand" => "low" );
// Return the proper value, or indicate key was invalid
return isset( $data[ $m[1] ] ) ? $data[ $m[1] ] : "{invalid key}" ;
}
// Our main widget function which takes a string with placeholders
function widget ( $arguments ) {
// Performs a lookup on anything between { and }
echo preg_replace_callback( "/{(.+?)}/", 'replacer', $arguments );
}
// The price is 5 and {invalid key} demand is low.
widget( "The price is {price} and {nothing} demand is {demand}." );
答案 4 :(得分:1)
是的,你可以。在函数中使用全局。
$global_var = 'a';
foo($global_var);
function foo($var){
global $global_var;
$global_var = 'some modifications'.$var;
}
答案 5 :(得分:-1)
考虑更改参数,然后从widget函数返回它,而不是简单地在函数内更改它。对于阅读代码的人来说,更清楚的是$ argument被修改而不必阅读该函数。
$argument = widget($argument);
function widget($argument) {
// get $price;
return $argument . $price;
}