获得地址多维数组递归搜索的PHP [英] Get address multi-dimensional array recursive search php
本文介绍了获得地址多维数组递归搜索的PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下PHP搜索脚本,将遍历数组多维。当$价值发现它会返回,但我希望返回地址以及(考虑它只是2级)
函数arr_search($数组$线,$ LVL = 0)
{//通过每个元素的循环。如果元素又是数组,函数被调用。如果没有,结果遥相呼应。
的foreach($数组$关键=> $值)
{
如果(is_array($值))
{
arr_search(价值$,$线);
}其他{
如果(strpos($线,$值))
回声发现$键:$值\\ N的;
//返回$价值; //应该返回数组[?],[$键],[$值]
}}返回false;
}
您可以看到,$关键是找到最新的数组的地址。但我想有父数组的索引。
阵列例如:
阵列
(
[0] =>排列
(
[0] => string324
[1] => string234
[2] => string7567
[3] => stringw34 )[1] =>排列
(
[0] => string4563
[1] => string37 )[2] =>排列
(
[0] => string3735
[1] => string3563
[2] => string3563
[3] => string356
[4] => string356
)
)
解决方案
这应该帮助你。
< PHP功能array_find_deep(数组$数组,字符串$,数组和放大器; $结果){
的foreach($数组$关键=> $值){
如果(is_array($值)){
$成功= array_find_deep(价值$,$字符串,$结果);
如果($成功){
array_unshift($结果,$键);
返回true;
}
}其他{
如果(STRCMP($字符串,$值)== 0){
array_unshift($结果,$键);
返回true;
}
}
}
返回false;
}$阵列=阵列(
1 =>阵列(
1 =>阵列(
1 => 一个,
2 => b的,
3 => C,
4 => D,
5 => E,
)
2 =>阵列(
1 => F,
2 => G,
3 => H,
4 => 一世,
5 => J,
)
3 =>阵列(
1 => K,
2 => 升,
3 => M,
4 =>的n,
5 => O,
)
)
2 =>阵列(
1 =>阵列(
1 => 一个,
2 => B表示
3 => C,
4 => D,
5 => E,
)
2 =>阵列(
1 => F,
2 => G,
3 => H,
4 => 一世,
5 => J,
)
3 =>阵列(
1 => K,
2 =>的L,
3 => M,
4 => N
5 => O,
)
)
3 =>阵列(
1 =>阵列(
1 => P,
2 => Q,
3 => R,
4 =>的s,
5 => T,
)
2 =>阵列(
1 => U
2 => V,
3 => W,
4 => X,
5 => Y,
)
3 =>阵列(
1 => Z,
2 => P,
3 => Q,
4 => R,
5 =>的S,
)
)
);$结果=阵列();
$成功= array_find_deep($数组,'S',$结果);后续代码var_dump($结果);
将显示方式去你的数据。
阵列(3){
[0] =>
INT(3)
[1] =>
INT(1)
[2] =>
INT(4)
}
i have the below php search script that will traverse a multidimentional array. when $value is found it will return it, but i wish to return the address as well (considering it is only 2 levels)
function arr_search($array, $line, $lvl=0)
{
// Loops through each element. If element again is array, function is recalled. If not, result is echoed.
foreach($array as $key=>$value)
{
if(is_array($value))
{
arr_search($value, $line);
}else{
if(strpos($line, $value))
echo "found $key: $value\n";
// return $value; // should return array with [?],[$key],[$value]
}
}
return false;
}
you can notice that $key is the address of the latest array found. but i want to have the index of the parent array.
array example:
Array
(
[0] => Array
(
[0] => string324
[1] => string234
[2] => string7567
[3] => stringw34
)
[1] => Array
(
[0] => string4563
[1] => string37
)
[2] => Array
(
[0] => string3735
[1] => string3563
[2] => string3563
[3] => string356
[4] => string356
)
)
解决方案
This should help you.
<?php
function array_find_deep(array $array, $string, array &$result) {
foreach ($array as $key => $value) {
if (is_array($value)) {
$success = array_find_deep($value, $string, $result);
if ($success) {
array_unshift($result, $key);
return true;
}
} else {
if (strcmp($string, $value) == 0) {
array_unshift($result, $key);
return true;
}
}
}
return false;
}
$array = array(
1 => array(
1 => array(
1 => "a",
2 => "b",
3 => "c",
4 => "d",
5 => "e",
),
2 => array(
1 => "f",
2 => "g",
3 => "h",
4 => "i",
5 => "j",
),
3 => array(
1 => "k",
2 => "l",
3 => "m",
4 => "n",
5 => "o",
),
),
2 => array(
1 => array(
1 => "A",
2 => "B",
3 => "C",
4 => "D",
5 => "E",
),
2 => array(
1 => "F",
2 => "G",
3 => "H",
4 => "I",
5 => "J",
),
3 => array(
1 => "K",
2 => "L",
3 => "M",
4 => "N",
5 => "O",
),
),
3 => array(
1 => array(
1 => "p",
2 => "q",
3 => "r",
4 => "s",
5 => "t",
),
2 => array(
1 => "u",
2 => "v",
3 => "w",
4 => "x",
5 => "y",
),
3 => array(
1 => "z",
2 => "P",
3 => "Q",
4 => "R",
5 => "S",
),
),
);
$result = array();
$success = array_find_deep($array, 's', $result);
var_dump($result);
Will display the "way" to get to your data.
array(3) {
[0]=>
int(3)
[1]=>
int(1)
[2]=>
int(4)
}
这篇关于获得地址多维数组递归搜索的PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文