搜索在多维数组键和返回路径,它

编程入门 行业动态 更新时间:2024-10-22 19:34:09
本文介绍了搜索在多维数组键和返回路径,它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要找到数组中的特定键,返回无论其价值和路径查找键即可。例如:

$阵列=阵列(  FS1'=>阵列(    'ID1'=> 0,    '富'=> 1,    FS2'=>阵列(      ID2'=> 1,      'foo2的'=> 2,      FS3'=>阵列(        ID3'=>空值,      )      FS4'=>阵列(        ID4=> 4,        '酒吧'=> 1,      )    )  ));搜索($阵列,'FS3'); //返回('fs1.fs2.fs3',阵列('ID3'=>空))搜索($阵列,'FS2'); //返回('fs1.fs2',阵列(ID2'=> 1,...))

我已经能够通过数组递归找到正确的钥匙,并使用 RecursiveArrayIterator (如下图所示)返回数据,但我不知道最好的方法来跟踪我目前什么路径。

$ I =新RecursiveIteratorIterator    新RecursiveArrayIterator($数组)    RecursiveIteratorIterator :: SELF_FIRST);的foreach($ I $作为重点=>的值){  如果($关键=== $搜索){    返回$价值;  }}

解决方案

刚刚完成的缘故和未来的游客。结合例子code以上,我评论了关于领取钥匙的答案。这是一个工作函数,将一个小的变化返回请求的结果。在我返回数组我返回键路径和值,而不是要求 0 和 $搜索的钥匙。我觉得这是更详细的,更容易处理。

< PHP$阵列=阵列(    FS1'=>阵列(        'ID1'=> 0,        '富'=> 1,        FS2'=>阵列(            ID2'=> 1,            'foo2的'=> 2,            FS3'=>阵列(                ID3'=>空值,            )            FS4'=>阵列(                ID4=> 4,                '酒吧'=> 1,            )        )    ));功能搜索($数组$ searchKey =''){    //阵列上创建一个递归迭代循环递归    $ ITER =新RecursiveIteratorIterator(        新RecursiveArrayIterator($数组)        RecursiveIteratorIterator :: SELF_FIRST);    //循环迭代    的foreach(ITER $ $作为重点=> $值){        //如果该键我们的搜索匹配        如果($关键=== $ searchKey){            //将当前关键            $键=阵列($键);            //循环向上递归链            为($ I = $ iter-> getDepth() - 1; $ I> = 0; $ I - ){                //添加每个父键                array_unshift($键,$ iter-> getSubIterator($ⅰ) ​​- >键());            }            //返回我们的输出数组            返回数组('路径'=>'。'破灭(,$键),价值= GT; $值);        }    }    //返回false,如果未找到    返回false;}$ searchResult1 =搜索($数组,'FS2');$ searchResult2 =搜索($数组,'FS3');回声< pre>中;的print_r($ searchResult1);的print_r($ searchResult2);

输出:

阵列(    [路径] => fs1.fs2    [值] =>排列        (            [ID2] => 1            [foo2的] => 2            [FS3] =>排列                (                    [ID3] =>                )            [FS4] =>排列                (                    [ID4] => 4                    [巴] => 1                )        ))排列(    [路径] => fs1.fs2.fs3    [值] =>排列        (            [ID3] =>        ))

I need to find a specific key in an array, and return both its value and the path to find that key. Example:

$array = array( 'fs1' => array( 'id1' => 0, 'foo' => 1, 'fs2' => array( 'id2' => 1, 'foo2' => 2, 'fs3' => array( 'id3' => null, ), 'fs4' => array( 'id4' => 4, 'bar' => 1, ), ), ), ); search($array, 'fs3'); // Returns ('fs1.fs2.fs3', array('id3' => null)) search($array, 'fs2'); // Returns ('fs1.fs2', array('id2' => 1, ... ))

I've been able to recurse through the array to find the correct key and return the data using RecursiveArrayIterator (shown below), but I don't know the best way to keep track of what path I'm currently on.

$i = new RecursiveIteratorIterator new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST); foreach ($i as $key => value) { if ($key === $search) { return $value; } }

解决方案

Just for completion sake and future visitors. Combining the example code above and the answer I commented about to get the keys. Here is a working function that will return the requested results with one small change. In my return array I return the keys path and value instead of the requested 0 and $search for the keys. I find this more verbose and easier to handle.

<?php $array = array( 'fs1' => array( 'id1' => 0, 'foo' => 1, 'fs2' => array( 'id2' => 1, 'foo2' => 2, 'fs3' => array( 'id3' => null, ), 'fs4' => array( 'id4' => 4, 'bar' => 1, ), ), ), ); function search($array, $searchKey=''){ //create a recursive iterator to loop over the array recursively $iter = new RecursiveIteratorIterator( new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST); //loop over the iterator foreach ($iter as $key => $value) { //if the key matches our search if ($key === $searchKey) { //add the current key $keys = array($key); //loop up the recursive chain for($i=$iter->getDepth()-1;$i>=0;$i--){ //add each parent key array_unshift($keys, $iter->getSubIterator($i)->key()); } //return our output array return array('path'=>implode('.', $keys), 'value'=>$value); } } //return false if not found return false; } $searchResult1 = search($array, 'fs2'); $searchResult2 = search($array, 'fs3'); echo "<pre>"; print_r($searchResult1); print_r($searchResult2);

outputs:

Array ( [path] => fs1.fs2 [value] => Array ( [id2] => 1 [foo2] => 2 [fs3] => Array ( [id3] => ) [fs4] => Array ( [id4] => 4 [bar] => 1 ) ) ) Array ( [path] => fs1.fs2.fs3 [value] => Array ( [id3] => ) )

更多推荐

搜索在多维数组键和返回路径,它

本文发布于:2023-11-30 21:00:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1651454.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多维   数组   路径

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!