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

时间:2016-06-22 05:56:58

标签: php arrays function

我是php /编程的新手,想知道为什么这不会像我想的那样工作。

我有一个数组,我想用函数修改其中一个值。

我一直在阅读并阅读一些教程,并认为它与变量范围有关?或者这可能不是接近这样的方法而应该使用其他方法?

<?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"];
?>

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

4 个答案:

答案 0 :(得分:2)

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

$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"];

以下是解释(取自here

explanation

也请阅读此SO question

其他方法是从函数返回值。在函数内部,使用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"];

答案 1 :(得分:1)

尝试:

1)从函数

返回更新的数组$a

2)再次在$someArray中接收该数组

$someArray = array("value1"=> 0, "value2" => 0);
function test ($a) {
    if ( 5 > 4 ) {
        $a["value1"] += 1;
    }
    return $a;
}
$someArray = test($someArray);
echo "Updated ".$someArray["value1"];

答案 2 :(得分:0)

你的功能回应了东西,但不会改变或返回值。您想要实现的是更改/更改值,因此您可以在函数中返回此值而不是echo,并为该值设置变量以回显。下面,你可以找到你应该怎么做;

<?php
$someArray = array("value1"=> 0, "value2" => 0);
function test ($a) {
    if ( 5 > 4 ) {
        $a["value1"] += 1;
        return $a["value1"] . "<br/> YEY we did it";            
    }
}
echo test($someArray);
?>

并在sandbox

中查看

答案 3 :(得分:0)

使用传递参考

test(&$someArray);