【问题标题】:Array value doesn't get updated with the posted value数组值不会随发布的值更新
【发布时间】:2013-07-01 12:22:33
【问题描述】:

我有两个 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 ) 
  }
}

正如您在我的 cmets 中看到的,在“循环 1”中它正在更新,它也显示它已更新。但是,如果我再次循环遍历数组,就像您在“循环 2”中看到的那样,它表明它没有更新。

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

【问题讨论】:

标签: php arrays forms multidimensional-array


【解决方案1】:

如果你想这样做,你必须使用引用。 将& 添加到您的第一个循环中。

// 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'];
    }
}

【讨论】:

  • 为这个答案添加一些背景知识:PHP 创建您当前正在迭代的元素的副本,并且您在原始问题中覆盖此副本,因此数组本身保持不变。使用引用运算符告诉 php 引用原始实例而不创建新实例。这样,您对对象所做的任何更改也将直接应用于您的数组。第二种方法应该是不言自明的。
【解决方案2】:

在下面添加这个

$medewerkers[] = $medewerker;

行后

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

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

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

【讨论】:

  • 这不起作用,抱歉。我认为使用上述建议的参考资料对我来说是最好的解决方案。还是谢谢!
【解决方案3】:

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'];
  }
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多