是否可以将数组传递给函数并将相同的数组对象返回?
function array_setdefault($arr, $key, $dflt) {
if (array_key_exists($key, $arr)) {
return $arr[$key];
}
$arr[$key] = $dflt;
return $arr[$key];
}
$errors = ["foo" => ["bar"]];
array_push(array_setdefault($errors, "foo", []), "bim");
array_push(array_setdefault($errors, "bla", []), "wub");
var_dump($errors);
导致:
array(1) {
["foo"]=>
array(1) {
[0]=>
string(3) "bar"
}
}
但我希望:
array(2) {
["foo"]=>
array(2) {
[0]=>
string(3) "bar"
[1]=>
string(3) "bim"
}
["bla"]=>
array(1) {
[0]=>
string(3) "wub"
}
}
即。如果未设置$ key,则应在数组上设置$ dflt。如果先前已设置或在当前调用array_setdefault中设置之后,返回$ arr [$ key](即$ dflt数组对象)的内容。
答案 0 :(得分:3)
您需要使用引用参数,以便函数中的更改将修改原始变量,并返回引用。
function &array_setdefault(&$arr, $key, $dflt) {
if (!array_key_exists($key, $arr)) {
$arr[$key] = $dflt;
}
return $arr[$key];
}
在函数名之前放置&
使其返回引用。将&
放在参数之前会使该参数成为引用参数。