通过引用更改多维数组中的值(在PHP中)?

时间:2017-08-23 11:47:46

标签: php arrays multidimensional-array reference

以下PHP函数通过匹配其键来找到多维数组中的节点:

<?php
function & findByKey($array, $key) {
    foreach ($array as $k => $v) {
        if(strcasecmp($k, $key) === 0) {
            return $array[$k];
        } elseif(is_array($v) && ($find = findByKey($array[$k], $key))) {
            return $find;
        }
    }

    return null;
}


$array = [
    'key1' => [
        'key2' => [
            'key3' => [
                'key5' => 1
            ],
            'key4' => '2'
        ]
    ]
];

$result = findByKey($array, 'key3');

我希望函数返回对节点的引用,这样如果我更改$result,那么原始$array也会更改(如Javascript对象)。

<?php
array_splice($result, 0, 0, '2');

//Changes $array also since the `$result` is a reference to:
$array['key1']['key2']['key3']

我该怎么做?

1 个答案:

答案 0 :(得分:1)

你需要做两件事:

1)指定您的$array参数作为参考:

function & findByKey(&$array, $key) {

2)使用$result

通过引用分配变量&
$result = &findByKey($array, 'key3');

由于您以递归方式调用函数,因此您还需要通过引用分配$find

共:

function & findByKey(&$array, $key) {
    foreach ($array as $k => $v) {
        if(strcasecmp($k, $key) === 0) {
            return $array[$k];
        } elseif(is_array($v) && ($find = &findByKey($array[$k], $key))) {
            return $find;
        }
    }

    return null;
}


$result = &findByKey($array, 'key3');
$result = 'changed';
print_r($array);