无法修改数组值?

时间:2014-01-10 11:00:17

标签: php arrays

我有一个处理表单数据的简单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"
}

4 个答案:

答案 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";
    }
}