为什么php函数不更新数组值

kel*_*teb 6 php arrays function

我是 php/programming 的新手,想知道为什么这不能按我认为的方式工作。

我有一个数组,我想用函数修改它的值之一。

我一直在阅读并遵循一些教程,并认为这与变量范围有关?或者也许这不是解决此类问题的方法,应该使用其他方法?

<?php
$someArray = array("value1"=> 0, "value2" => 0);
function test ($a) {
    if ( 5 > 4 ) {
        $a["value1"] += 1;
        echo $a["value1"] . "<br/>";            
    }
}
test($someArray);
echo $someArray["value1"];
?>
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么当我在函数内部回显以获取“value1”的新值时它起作用,但在外部它不起作用。我真的很感激任何帮助/指导,如果这太愚蠢或错误,我很抱歉。

Tha*_*lan 12

您作为数组的副本传递。您应该使用地址传递数组以反映数组内所做的更改。使用&(作为参考传递):

$someArray = array("value1"=> 0, "value2" => 0);
function test (&$a) {   //Use & here
               ^
    if ( 5 > 4 ) {
        $a["value1"] += 1;
        echo $a["value1"] . "<br/>";            
    }
}
test($someArray);
echo $someArray["value1"];
Run Code Online (Sandbox Code Playgroud)

这是解释:(从这里获取)

解释

也阅读这个问题


另一种方法是从函数返回值。在函数内部,使用 return 并在外部捕获它:

$someArray = array("value1"=> 0, "value2" => 0);
function test ($a) {
    if ( 5 > 4 ) {
        $a["value1"] += 1;
        echo $a["value1"] . "<br/>";            
    }
    return $a; //Return here
}
$someArray = test($someArray);  //Capture here
echo $someArray["value1"];
Run Code Online (Sandbox Code Playgroud)