1

我有两个 php 页面“page1”和“page2”。

  1. page1提交一个表单(method="post") 并将表单值发送到page2
  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”中看到的那样,它表明它没有更新。

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

4

3 回答 3

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'];
    }
}
于 2013-07-01T12:24:24.383 回答
1

在下面添加这个

$medewerkers[] = $medewerker;

线后

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

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

$medewerker[1] = $_POST['txtNaam'];
$medewerkers[] = $medewerker;
于 2013-07-01T12:30:15.913 回答
1

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

注意:除非数组被引用,否则 foreach 对指定数组的副本而不是数组本身进行操作。

通过引用传递

您可以通过引用函数来传递变量,以便函数可以修改变量。语法如下:

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

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

文档:通过引用传递

在您的情况下应用它,它应该变成:

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

希望这可以帮助。

于 2013-07-01T12:28:33.947 回答