在较大的数组树中搜索数组键分支-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。现在让我试试。