douyi8408 2012-09-06 23:03 采纳率: 0%
浏览 42
已采纳

获取地址多维数组递归搜索php

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
";
          // 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
    )
)
  • 写回答

1条回答 默认 最新

  • douzuo0002 2012-09-13 22:38
    关注

    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)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料