在较大的数组树中搜索数组键分支-PHP

在较大的数组树中搜索数组键分支-PHP,php,arrays,search,recursion,tree,Php,Arrays,Search,Recursion,Tree,问题与此类似 不同之处在于,我不是在搜索值,而是在更大的数组键树中搜索一个小的数组键分支 基本上,这里是我正在寻找的数组键分支: $mission_parameters['stmt_echo']['subnodes']['exprs'][0]['expr_constfetch']['subnodes']['name']['name']['subnodes']['parts'][0] = 'true'; 数组密钥树是一个非常大的树,这意味着它是多维的,并且它可以在树中的任意点包含$mission

问题与此类似

不同之处在于,我不是在搜索值,而是在更大的数组键树中搜索一个小的数组键分支

基本上,这里是我正在寻找的数组键分支:

$mission_parameters['stmt_echo']['subnodes']['exprs'][0]['expr_constfetch']['subnodes']['name']['name']['subnodes']['parts'][0] = 'true';
数组密钥树是一个非常大的树,这意味着它是多维的,并且它可以在树中的任意点包含$mission_参数

所以这有点像在一棵棕色的树上找到一根黄色的树枝,它可能有也可能没有黄色的树枝

还需要比较分支末尾的值

我在看array_intersect,但它不适用于多维。以前有人解决过这种问题吗

注意,这与在数组中搜索数组不同。我不是在寻找价值

--编辑--

下面是一个例子:

我在找

array(
    'statement' => array(
        'statement2' => array(
            0 => 'true',
        ),
    ),
);
在这样一个较大的阵列中:

array(
    'statement4' => array(
        'statement' => array(
            'statement2' => array(
                0 => 'true',
            ),
            'statement3' => array(
                2 => 'false',
            ),
        ),
    ),
);
您是否看到较小的阵列如何像较大阵列的分支。较大的数组当前包含较小的分支,但它有其他种类的元素。因此,我正在搜索数组键分支。在本例中,
[statement][statement2][0]='true'

我认为(您已经确认)可以将数据表示为XML结构。在这种情况下,您可以使用查找数据中的任何分支。以下是根据您的问题推断出的示例XML数据:


符合事实的
下面是查找您提到的节点的PHP代码:

$doc = new DOMDocument;
$doc->Load("test.xml");

$xpath = new DOMXPath($doc);
$nodes = $xpath->query("//subnodes/parts[part='true']");

foreach($nodes as $node) {
    dumpNodePath($node);
}

# Output
# /stmt_echo/subnodes/exprs/expr_constfetch/subnodes/name/name/subnodes/parts

function dumpNodePath($node) {
    $path = array($node->tagName);
    while ($node = $node->parentNode) {
        if ($node->nodeType != XML_DOCUMENT_NODE) {
            $path[] = $node->tagName;
        }
    }
    echo "/" . implode("/", array_reverse($path)) . "\n";
}

不清楚你想做什么,你的描述也毫无意义。你只是举了一个例子,说明你在寻找什么,但却忽略了解释为什么它实际上不是你问题的答案。提供一些实际的示例数据(不仅仅是您提供的数组元素表达式)和预期的结果可能会有所帮助。这是为了您的喜好而编辑的。我在火车上时正在考虑这一点。为了构造该查询,我需要使用eval。还有一个问题是,我无法检查多个分支。比如,如果我的搜索数组不仅仅是一个直接的单向分支,而是有两个端点。哦,天哪,你是说
statement->statement2->0
只是一个例子,你会搜索表达式吗?这只是一个例子。现在,我只搜索具有一个端点的单线分支,我正在考虑手动添加更多的单线来进行测试。但这不是很有效。不知道你所说的表达是什么意思?大型数组结构基本上与我给出的示例相似,但它要大得多,并且有许多子节点和多个端点。这实际上是PHP脚本静态代码分析中的抽象语法树。我有一个建议,看看它是否有意义。与其构建嵌套的关联数组结构,不如构建XML结构。这应该是直截了当的。然后使用查找节点。如果您以前没有使用过XPath,您会惊讶于它让您搜索树的方式。您是对的。我可以将数据导出为XML。现在让我试试。