PHP - 如何创建一个递归函数? [英] PHP - How can I create a recursive function?

查看:96
本文介绍了PHP - 如何创建一个递归函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数组:

 阵列(1){
  [农场] =>阵列(1){
    [动物] =>阵列(1){
      [马] =>阵列(4){
        [弗雷德] =>串(4)弗雷德
        [SAM] =>串(4)山姆
        [阿兰] =>串(4)阿兰
        [约翰] =>串(4)约翰
      }
    }
  }
}

我的功能(由@FrayneKonok创建)

 的$ id =2;
$搜索=马;
get_values​​($ ARR);
功能get_values​​($改编,的$ id){
  全球搜索$;
  的foreach($改编为$关键=> $值){
    如果($键== $搜索){
      如果(is_array($值)){
          回声(加入(< A HREF ='?mypage.php ID =$ ID&放大器; DIR =。$值'><李>中,array_keys($值)));
          回声(< /李>< / A>中);
      }其他{
        回波($值);
      }
    }其他{
      get_values​​($值);
    }
  }
}
get_values​​($阵列,$ ID);

的结果是:

 弗雷德
< A HREF =mypage.php ID = 2及?DIR =阵列><立GT;萨姆和LT; /李>< / A>
< A HREF =mypage.php ID = 2及?DIR =阵列><立GT;阿兰< /李>< / A>
< A HREF =mypage.php ID = 2及?DIR =阵列><立GT;约翰和LT; /李>< / A>

我在寻找的结果是:

 < A HREF =?mypage.php ID = 2及DIR =弗雷德><李>弗雷德< /李>< / A>
< A HREF =mypage.php ID = 2及?DIR = SAM><立GT;萨姆和LT; /李>< / A>
< A HREF =mypage.php ID = 2及?DIR =艾伦><立GT;阿兰< /李>< / A>
< A HREF =mypage.php ID = 2及?DIR =约翰><立GT;约翰和LT; /李>< / A>

另一个例子是当我使用如果($搜索=农场)我的结果就变成了:

 动物

当我在寻找的结果是:

 < A HREF =?mypage.php ID = 2及DIR =动物><李>动物< /李>< / A>


解决方案

在线链接

阵列和输入,函数调用

  $ ARR =阵列(农场=>
             阵列(动物=>
                   阵列(马=>
                         阵列(弗雷德=>中弗雷德,
                               萨姆=> 萨姆
                               阿兰=> 阿兰
                               约翰=> 约翰)
                        )
                  )
            );
$搜索='农场';
get_values​​($ ARR);

功能:

 函数get_values​​($ ARR){
    全球搜索$;
    的foreach($改编为$关键=> $值){
        如果($键== $搜索){
            如果(is_array($值)){
                $键= array_keys($值);
                如果(计数($键)→1){
                    为($ I = 0; $ I<计数($键); $ I ++){
                        呼应'< A HREF =mypage.php ID = 2及?DIR ='$键[$ i]。'><李>'$键[$ i]'< /李> &所述; / A>';
                    }
                }其他{
                    呼应'< A HREF =mypage.php ID = 2及?DIR ='$键[0]。'><李>'$键[0]'< /李>< / A>';
                }
            }
            其他{
                回声$价值;
            }
        }其他{
            get_values​​($值);
        }
    }
}

输出

 < A HREF =?mypage.php ID = 2及DIR =动物><李>动物< /李>< / A>

亦作马测试

My array:

array(1) {
  ["farm"] => array(1) {
    ["animals"] => array(1) {
      [horses] => array(4) {
        ["fred"] => string(4) "fred"
        ["sam"] => string(4) "sam"
        ["alan"] => string(4) "alan"
        ["john"] => string(4) "john"
      }
    }
  }
}

My function (created by @FrayneKonok)

$id = "2";
$search = "horses";
get_values($arr);
function get_values($arr, $id) {
  global $search;
  foreach($arr as $key => $value) {
    if($key == $search) {
      if(is_array($value)) {
          echo(join("<a href='mypage.php?id=".$id."&dir=".$value."'><li>",array_keys($value)));
          echo("</li></a>");    
      } else {
        echo($value);
      }
    } else {
      get_values($value);
    }
  }
}
get_values($array,$id);

The result is:

"fred"
<a href="mypage.php?id=2&dir=Array"><li>sam</li></a>
<a href="mypage.php?id=2&dir=Array"><li>alan</li></a>
<a href="mypage.php?id=2&dir=Array"><li>john</li></a>

The result I'm looking for:

<a href="mypage.php?id=2&dir=fred"><li>fred</li></a>
<a href="mypage.php?id=2&dir=sam"><li>sam</li></a>
<a href="mypage.php?id=2&dir=alan"><li>alan</li></a>
<a href="mypage.php?id=2&dir=john"><li>john</li></a>

Another example is when i use if($search = "farm") my result becomes:

"animals"

When the result I'm looking for is:

<a href="mypage.php?id=2&dir=animals"><li>animals</li></a>

解决方案

Online link

Array and input, function call

$arr = array("farm" => 
             array("animals"=>
                   array("horses" => 
                         array("fred" => "fred",
                               "sam" => "sam",
                               "alan" => "alan",
                               "john" => "john")
                        )
                  )
            );


$search = 'farm';
get_values($arr);

Function:

function get_values($arr){  
    global $search;
    foreach($arr as $key => $value){
        if($key == $search){
            if(is_array($value)){
                $keys = array_keys($value);
                if(count($keys) > 1){
                    for($i = 0; $i < count($keys); $i++){
                        echo '<a href="mypage.php?id=2&dir='.$keys[$i].'"><li>'.$keys[$i].'</li></a>';
                    }
                }else{
                    echo '<a href="mypage.php?id=2&dir='.$keys[0].'"><li>'.$keys[0].'</li></a>';
                }
            }           
            else{
                echo $value;
            }
        }else{
            get_values($value);
        }       
    }   
}

Output

<a href="mypage.php?id=2&dir=animals"><li>animals</li></a>

Also tested for the horses.

这篇关于PHP - 如何创建一个递归函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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