使用发布的值不会更新数组值

时间:2013-07-01 12:22:33

标签: php arrays forms multidimensional-array

我有两个php页面'page1'和'page2'。

  1. page1 提交表单(method =“post”)并将表单值发送到 page2
  2. page2 使用发布的值更新其多维数组。
  3. 以下是更新数组的代码:

    // 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”中看到的那样,它表明它没有更新。

    你能看出我做错了什么吗?

3 个答案:

答案 0 :(得分: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'];
    }
}

答案 1 :(得分:1)

foreach循环的工作方式略有不同;引自foreach()的PHP手册文档:

  

注意:除非引用了数组,否则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'];
  }
}

希望这有帮助。

答案 2 :(得分:1)

在行下面添加

$medewerkers[] = $medewerker;
行后

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

最后你的代码必须看起来像。

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