Php 如何将可变数量的参数传递给sprintf()函数?
在我的网页中,如果用户选择表单中的某些选项,比如Php 如何将可变数量的参数传递给sprintf()函数?,php,string,printf,Php,String,Printf,在我的网页中,如果用户选择表单中的某些选项,比如 1。被选中的人 2.B-选择 3.C-未选择 然后,脚本中的sprintf()函数应该接受该数量的参数- sprintf("%s %s", valueOf(A), valueOf(B)); 如果三者都被选中,那么 sprintf("%s %s %s", valueOf(A), valueOf(B), valueOf(C)); 我怎样才能做到这一点 动态生成%s%s..的字符串。 使用而不是sprintf #//用于演示\\ $\u POST
1。被选中的人
2.B-选择
3.C-未选择
然后,脚本中的sprintf()函数应该接受该数量的参数-
sprintf("%s %s", valueOf(A), valueOf(B));
如果三者都被选中,那么
sprintf("%s %s %s", valueOf(A), valueOf(B), valueOf(C));
我怎样才能做到这一点
%s%s..的字符串。
sprintf
#//用于演示\\
$\u POST[“A”]=“订阅此”;
$\u POST[“B”]=“订阅”;
#\\用于演示//
$selected=array();
如果(isset($_POST[“A”]))$选择的[]=$_POST[“A”];
如果(isset($_POST[“B”]))$selected[]=$_POST[“B”];
如果(isset($_POST[“C”]))$selected[]=$_POST[“C”];
$format=内爆(“,数组填充(0,计数($selected),“%s”);
echo vsprintf($format,$selected);
sprintf()
并不是真正做到这一点的方法。它适用于具有动态占位符的静态字符串,而不是具有未知占位符数目的动态字符串
您选择的所有选项,无论您如何收集它们,都可能以数组形式结束。所以你可以这样做:
$arr = array(
'Chosen option',
'Another option'
// ...
);
$str = implode(' ', $arr);
$args = <array_of_chosen_options>;
$fmt = trim(str_repeat("%s ", count($args)));
$result = vsprintf($fmt, $args);
是的,您可以
vsprintf()
it,但是为什么还要为生成必须解析和插值的格式字符串而烦恼呢?您想要的可能是函数。它采用数组作为参数集。所以在你的情况下,你会有这样的东西:
$arr = array(
'Chosen option',
'Another option'
// ...
);
$str = implode(' ', $arr);
$args = <array_of_chosen_options>;
$fmt = trim(str_repeat("%s ", count($args)));
$result = vsprintf($fmt, $args);
$args=;
$fmt=trim(str_repeat(“%s”,count($args));
$result=vsprintf($fmt,$args);
sprintf
不是理想的方法。假设您的HTML看起来像
<input type="checkbox" name="options[]" value="A" /> A
<input type="checkbox" name="options[]" value="B" /> B
...
为什么要麻烦?为什么不仅仅是
内爆(“”,
?@DaveRandom当然,在问题中的简单场景中,内爆
将是更好的解决方案,但是在更复杂的情况下,每个选定元素的格式可能不同vsprintf
更加灵活。谢谢,这是一个漂亮而优雅的解决方案!为什么要麻烦?为什么不干脆内爆(“”,
?@DaveRandom:嗯,就我而言,sprintf()更干净。实际上,它是我拥有的一个SQL查询占位符。(“插入ABC('%s','%s'…)”)。我想知道您是指复选框而不是选项吗?