PHP中按键从多维数组返回值

PHP中按键从多维数组返回值,php,Php,我需要根据键从多维数组返回一个值 基本上,我不想为循环创建2或3个,因为数组可以像无止境一样嵌套 我的数组示例 $menu = Array ( [16] => Array ( [categories_id] => 16 [categories_name] => Recorders [parent_name] => Recorders [children]

我需要根据键从多维数组返回一个值

基本上,我不想为循环创建2或3个,因为数组可以像无止境一样嵌套

我的数组示例

$menu = Array
(
    [16] => Array
        (
            [categories_id] => 16
            [categories_name] => Recorders
            [parent_name] => Recorders
            [children] => Array
                (
                    [23] => Array
                        (
                            [categories_id] => 23
                            [categories_name] => Security
                            [parent_name] => Recorders - Security
                            [children] => Array
                                (
                                    [109] => Array
                                        (
                                            [categories_id] => 109
                                            [categories_name] => 4CH NVR
                                            [parent_name] => Recorders - Security - 4CH NVR
                                        )

                                    [110] => Array
                                        (
                                            [categories_id] => 110
                                            [categories_name] => 8CH NVR
                                            [parent_name] => Recorders - Security - 8CH NVR
                                        )
我找到了另一个几乎有效的解决方案:

function findParentNameFromCategory($obj, $search)
{

    if (!is_array($obj) && !$obj instanceof Traversable) return;

    foreach ($obj as $key => $value) {
        if ($key == $search) {
            return $value['parent_name'];
        } else {
            return findParentNameFromCategory($value, $search);
        }
    }
}

问题是它只是回显了值。我需要将该值分配给一个变量。如果我将echo更改为return,则根本没有得到任何值

$test = findParentNameFromCategory($menu, 109);

当我回显$test时,我在您的修复中根本没有任何值

您忘记了
else
案例。因此,还应返回递归调用的值:

array_walk_recursive($obj, function(&$v, $k){
        if($k == $search)
           return $v['parent_name'];
   });
function findParentNameFromCategory($obj, $search)
{
    if (!is_array($obj) && !$obj instanceof Traversable) return;

    foreach ($obj as $key => $value) {
        if ($key == $search) {
            $return = $value['parent_name'];
        } else {
            $return = findParentNameFromCategory($value, $search);
        }

        if ($return !== null) {
            return $return;
        }
    }
}

您需要在递归调用链中返回“up”值,请参阅参考副本以获取解释和示例。我尝试了这一点,并更改了示例,但仍然没有得到返回值:'(