获得地址多维数组递归搜索的PHP [英] Get address multi-dimensional array recursive search php

查看:95
本文介绍了获得地址多维数组递归搜索的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆