2013-07-01 53 views
1

我有兩個php頁'page1'和'page2'。數組值不會更新發布的值

  1. 第1頁提交一個表單(方法= 「POST」),併發送表單值TOT的第2頁
  2. page2使用發佈的值更新其多維數組。

下面是用於更新數組的代碼:

// page2 // 
if(isset($_POST['submit'])) { 

    // Loop 1 
    foreach($medewerkers as $medewerker){ 
     if($_POST['txtId'] == $medewerker[0]){ 
      $medewerker[1] = $_POST['txtNaam']; 
     } 
     print_r($medewerker); // SHOWS THAT IT IS UPDATED 
          // Array ([0] => 1 [1] => value updated) 

    } 

    // Loop 2 
    foreach($medewerkers as $medewerker){ 
     print_r($medewerker); // SHOWS THAT IT IS NOT UPDATED 
          // Array ([0] => 1 [1] => blabla) 
    } 
} 

正如你在我的意見看,在「循環1」它正在更新,也在於它的更新顯示。但是如果我再次循環訪問數組,就像在「循環2」中看到的那樣,它表明它沒有更新。

你能看到我做錯了什麼嗎?

+1

_「爲了能夠直接修改循環中的數組元素,使用&前面的$ value。在這種情況下,該值將通過引用來分配。「_ - http://www.php.net/manual/en/control-structures.foreach。php – CBroe

回答

2

如果你想這樣做,你必須使用引用。 將&添加到您的第一個循環中。

// Loop 1 
foreach($medewerkers as &$medewerker){ 
    if($_POST['txtId'] == $medewerker[0]){ 
     $medewerker[1] = $_POST['txtNaam']; 
    } 
} 

另一種方法可以索引你的原始數組。

// Loop 1 
foreach($medewerkers as $i => $medewerker){ 
    if($_POST['txtId'] == $medewerker[0]){ 
     $medewerkers[$i][1] = $_POST['txtNaam']; 
    } 
} 
+2

要爲此答案添加一些背景知識:PHP會創建一個當前正在迭代的元素的副本,並且將覆蓋原始問題中的該副本,因此該陣列本身保持不變。使用引用運算符告訴php引用原始實例而不創建新實例。這樣,對對象所做的任何更改都會直接應用於您的數組。第二種方法應該是不言自明的。 – ccKep

+0

@Fracsi所有的兩種方法都有效!謝謝! –

1

foreach循環的工作方式有點不同;從PHP手冊文檔報價爲foreach()

注:除非數組是被引用,foreach指定數組的一個拷貝,而不是該數組本身運行。

通過參考

傳遞可以通過引用傳遞變量的函數,從而該函數可以修改的變量。語法如下:

<?php 
function foo(&$var) 
{ 
    $var++; 
} 

$a=5; 
foo($a); 
// $a is 6 here 
?> 

文檔:Passing by Reference

你的情況運用它,它應該成爲:

foreach($medewerkers as &$medewerker){ 
// ---------------------^ 
    if($_POST['txtId'] == $medewerker[0]){ 
     $medewerker[1] = $_POST['txtNaam']; 
    } 
} 

希望這有助於。

+0

這種方法也適用。並感謝有用的信息! –

+0

很高興有幫助。別客氣。 –

1

添加此線以下

$medewerkers[] = $medewerker; 

$medewerker[1] = $_POST['txtNaam']; 

最後你的代碼必須看起來像後。

$medewerker[1] = $_POST['txtNaam']; 
$medewerkers[] = $medewerker; 
+0

這不起作用,對不起。我認爲像上面建議的參考工作對我來說是最好的解決方案。不管怎麼說,還是要謝謝你! –