2014-01-10 116 views
2

我有一個簡單的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" 
} 
+1

您不能修改$ _POST變量。 –

+0

是的,我知道。我不嘗試。見腳本。 – koljanep

+0

但他已經修改$ posted變量而不是$ _POST變量本身。 – rccoros

回答

-1

它應該是:

$posted = array(); 
$posted=$_POST; 
foreach ($posted as $key=>$val) { 
    if ($val == "on") { 
     $posted[$key] = "1"; 
    } 
} 
+0

這與koljanep在他的問題中使用的代碼是相同的。 –

0

這就是:

$posted = array(); 
    $posted=$_POST; 
    foreach ($posted as $key=>$val) { 
     if ($val == "on") { 
      $_POST[$key] = "1"; 
     } 
    } 
    var_dump($_POST); 
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循環使用的陣列,您應該使用另一個數組是不可編輯的,它不工作。

1

首先,您提供的代碼執行您期望的操作,並正確修改「已發佈」數組(PHP 5.3.18)。

按照PHP「的foreach」文件,修改你需要使用一個「參考」的「價值」,如下所示迴路的「價值」:

由於您只修改所有感興趣發佈'數組'中的'on'值,然後下面的代碼就可以做到這一點,並且明確了正在改變的內容。

$posted=$_POST; 
foreach ($posted as &$val) { // note the 'reference' on $val 
    if ($val == "on") { 
     $val = "1"; 
    } 
} 

這就是你想要的,沒有任何額外的變量。