在数组上设置默认值

时间:2014-08-16 13:36:32

标签: php arrays

是否可以将数组传递给函数并将相同的数组对象返回?

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数组对象)的内容。

1 个答案:

答案 0 :(得分:3)

您需要使用引用参数,以便函数中的更改将修改原始变量,并返回引用。

function &array_setdefault(&$arr, $key, $dflt) {
    if (!array_key_exists($key, $arr)) {
        $arr[$key] = $dflt;
    }
    return $arr[$key];
}

在函数名之前放置&使其返回引用。将&放在参数之前会使该参数成为引用参数。