在我的网页中,如果用户选择表单中的某些选项,请说
1. A - Chosen
2. B - Chosen
3. C - Not Chosen
然后,我的脚本中的sprintf()函数应该接受该数量的参数 -
sprintf("%s %s", valueOf(A), valueOf(B));
如果选择了所有三个,那么
sprintf("%s %s %s", valueOf(A), valueOf(B), valueOf(C));
我怎样才能做到这一点?
答案 0 :(得分:7)
你想要的可能是vsprintf
功能。它将数组作为参数集。所以在你的情况下,你会有这样的事情:
$args = <array_of_chosen_options>;
$fmt = trim(str_repeat("%s ", count($args)));
$result = vsprintf($fmt, $args);
答案 1 :(得分:2)
%s %s...
字符串vsprintf
代替sprintf
# // FOR DEMONSTRATION \\
$_POST["A"] = "subscribe_to_this";
$_POST["B"] = "subscribe_to_that";
# \\ FOR DEMONSTRATION //
$chosen = array();
if (isset($_POST["A"])) $chosen[] = $_POST["A"];
if (isset($_POST["B"])) $chosen[] = $_POST["B"];
if (isset($_POST["C"])) $chosen[] = $_POST["C"];
$format = implode(" ", array_fill(0, count($chosen), "%s"));
echo vsprintf($format, $chosen);
答案 2 :(得分:0)
sprintf()
实际上不是这样做的方法。它适用于带有动态占位符的静态字符串,而不是具有未知数量占位符的动态字符串。
您选择的所有选项,无论您如何收集它们,都可能会以阵列结束。所以你可以implode()
,就像这样:
$arr = array(
'Chosen option',
'Another option'
// ...
);
$str = implode(' ', $arr);
是的,你可以vsprintf()
,但是为什么要担心产生必须解析和插值的格式字符串的额外开销呢?
答案 3 :(得分:0)
sprintf
不是理想的方法。假设您的HTML看起来像
<input type="checkbox" name="options[]" value="A" /> A
<input type="checkbox" name="options[]" value="B" /> B
...
你可以做到
$s = implode(" ", $_POST['options']);