以下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']
我该怎么做?
答案 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);