我有两个php页面'page1'和'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”中看到的那样,它表明它没有更新。
你能看出我做错了什么吗?
答案 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
?>
在你的情况下应用它,它应该成为:
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;