我有一个处理表单数据的简单php脚本。在表单中,我有几个复选框,当选中这些复选框时,表单包含“on”作为值。
对于脚本的其余部分,我需要使用字符串“1”而不是“on”,但由于某种原因我无法更改它。
这是脚本:
$posted=$_POST;
foreach ($posted as $key=>$val) {
if ($val == "on") {
$posted[$key] = "1";
}
}
// The $_POST parameters
echo 'The $_POST parameters:';
echo '<pre>';
var_dump($_POST);
echo '</pre>';
// The $posted parameters after conversion
echo 'The $posted parameters (after \'conversion\'):';
echo '<pre>';
var_dump($posted);
echo '</pre>';
输出:
The $_POST parameters:
array(3) {
["id"]=>
string(6) "142892"
["help"]=>
string(2) "on"
["vm"]=>
string(2) "on"
}
The $posted parameters (after 'conversion'):
array(3) {
["id"]=>
string(6) "142892"
["help"]=>
string(2) "on"
["vm"]=>
string(2) "on"
}
答案 0 :(得分:2)
首先,您提供的代码符合您的预期,并正确修改“已发布”数组(PHP 5.3.18)。
根据PHP'foreach'文档,要修改循环中的'value',您需要使用'value'的'reference',如下所示:
由于您只对修改已发布的数组中的所有“on”值感兴趣,因此以下代码执行此操作并明确了要更改的内容。
$posted=$_POST;
foreach ($posted as &$val) { // note the 'reference' on $val
if ($val == "on") {
$val = "1";
}
}
这可以做你想要的,没有任何额外的变量。
答案 1 :(得分:0)
这是:
$posted = array();
$posted=$_POST;
foreach ($posted as $key=>$val) {
if ($val == "on") {
$_POST[$key] = "1";
}
}
var_dump($_POST);
答案 2 :(得分:0)
使用foreach循环时应该使用另一个数组
$posted = array();
$postArray = $_POST;
foreach ($postArray as $key=>$val) {
if ($val == "on") {
$posted[$key] = "1";
}
else {
$posted[$key] = $val;
}
}
var_dump($posted);
foreach循环中使用的数组不可编辑,但不起作用。
答案 3 :(得分:-1)
应该是:
$posted = array();
$posted=$_POST;
foreach ($posted as $key=>$val) {
if ($val == "on") {
$posted[$key] = "1";
}
}