Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从多维PHP数组中检索子集?_Php - Fatal编程技术网

如何从多维PHP数组中检索子集?

如何从多维PHP数组中检索子集?,php,Php,下面是一个PHP数组: $arr = [ 'target_a' => [], 'target_b' => [], 'target_c' => [ 'target_d' => [], 'target_e' => [ 'target_f' => [] ], ], 'target_g' => [], ]; 目标a,目标b,目标永远不会相互重复 我需

下面是一个PHP数组:

$arr = [
    'target_a' => [],
    'target_b' => [],
    'target_c' => [
        'target_d' => [],
        'target_e' => [
            'target_f' => []
        ],
    ],
    'target_g' => [],
];
目标a,目标b,目标永远不会相互重复

我需要一个函数:superFind(),它可以执行以下操作:

superFind('target_e');
// supposed to return:
'target_e' => [
    'target_f' => []
],

superFind('target_a');
// supposed to return:
[]
即,对于给定的
target_x
值,返回一个子集(最好包括其自身)


我尝试过递归函数,但不知道如何解决此问题。

这应该可以为您解决此问题:

$arr = [
    'target_a' => [],
    'target_b' => [],
    'target_c' => [
        'target_d' => [],
        'target_e' => [
            'target_f' => []
        ],
    ],
    'target_g' => [],
];

function superFind($arr, $target) {
    foreach ($arr as $key => $value) {
        if ($key == $target) return $value;
        if (is_array($value)) {
            if (($found = superFind($value, $target)) !== false) return $found;
        }
    }
    return false;
}

foreach (['target_e', 'target_a', 'target_q'] as $test) {
    echo "$test: ";
    if (($found = superFind($arr, $test)) !== false) print_r($found);
    else echo "Not found";
    echo "\n";
}
输出:

target_e: Array
(
    [target_f] => Array
        (
        )

)

target_a: Array
(
)

target_q: Not found