我是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”的新值时它起作用,但在它之外它不起作用。我非常感谢任何帮助/指导,如果这太愚蠢或错误,我很抱歉。
答案 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)
也请阅读此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);