我正在尝试创建一个递归函数,它在多维数组中按值(blubb)搜索特定元素并将其作为引用返回。但我的第一个想法是行不通的。我确定我错过了一些简单的事情。
$array = [
'obj1' => [
'attr1' => "blubb",
'attr2' => "bla"
],
'obj2' => [
'attr1' => "blabb",
'attr2' => "bla"
]
];
$node = changeAttr2($array);
$node["attr2"] = "blu";
print_r($node);
print_r($array);
function changeAttr2(&$input) {
foreach($input as &$value) {
if ($value === "blubb") {
return $input;
}
return changeAttr2($value);
}
}
输出:
Array
(
[obj1] => Array
(
[attr1] => blubb
[attr2] => bla
)
[obj2] => Array
(
[attr1] => blabb
[attr2] => bla
)
)
预期产出:
Array
(
[obj1] => Array
(
[attr1] => blubb
[attr2] => blu
)
[obj2] => Array
(
[attr1] => blabb
[attr2] => bla
)
)
答案 0 :(得分:1)
您通过引用传递数组,但是当您返回它时,您实际上并没有返回引用。
这样做(老实说,这看起来非常脏,需要重新思考,但如果你真的需要,这就是你做的方式):
<?php
$array = [
'obj1' => [
'attr1' => "blubb",
'attr2' => "bla"
],
'obj2' => [
'attr1' => "blabb",
'attr2' => "bla"
]
];
$node = &changeAttr2($array);
$node["attr2"] = "blu";
print_r($node);
print_r($array);
function &changeAttr2(&$input) {
foreach($input as &$value) {
if ($value === "blubb") {
return $input;
}
return changeAttr2($value);
}
}
打印:
Array
(
[obj1] => Array
(
[attr1] => blubb
[attr2] => blu
)
[obj2] => Array
(
[attr1] => blabb
[attr2] => bla
)
)
原因是您需要返回引用并将其用作参考。
中的更多细节