Heim  >  Artikel  >  Backend-Entwicklung  >  PHP一个递归方法返回值的问题

PHP一个递归方法返回值的问题

WBOY
WBOYOriginal
2016-10-22 00:14:11847Durchsuche

<code><?php $array = array(
    0 => array(
      '1a' => '',
      '3a' => '',
      '6a' => array(
        '6a1' => '',
        '6a2' => '',
        '6a3' => array(
          '6a31' => '',
          '6a33' => '',
          '6a34' => '1',
          ),
        ),
      ),
    1 => array(
      '3b' => '',
      '4b' => array(
        '4b1' => '',
        '4b2' => '',
        ),
      '6b' => '',
      )
    );

function search_val($key, $arr) {
  $v = '';
  foreach ($arr as $ks => $vs) {
    if($ks != $key && is_array($vs)) {
      search_val($key, $vs);
    }else if($ks != $key && is_string($vs)) {
      continue;
    }else if($ks == $key) {
      $v = $vs;
      break;
    }
  }
  return $v; 
  //var_dump($v);exit; //这里是有值的 为1
  //echo $v;  //测试这样可以直接输出
}
$va = search_val('6a34', $array);
var_dump($va); //$va始终为空 
</code>

这个方法的意思就是给一下标$key取出对应val的值,我在方法最后return $v,然后我把这个return的结果赋给一个值$va,这个值始终为空,但是我在方法最后打印$v的时候是有值的,为什么会这样呢?是变量作用域的问题还是我代码写的不规范导致的?求解

回复内容:

<code><?php $array = array(
    0 => array(
      '1a' => '',
      '3a' => '',
      '6a' => array(
        '6a1' => '',
        '6a2' => '',
        '6a3' => array(
          '6a31' => '',
          '6a33' => '',
          '6a34' => '1',
          ),
        ),
      ),
    1 => array(
      '3b' => '',
      '4b' => array(
        '4b1' => '',
        '4b2' => '',
        ),
      '6b' => '',
      )
    );

function search_val($key, $arr) {
  $v = '';
  foreach ($arr as $ks => $vs) {
    if($ks != $key && is_array($vs)) {
      search_val($key, $vs);
    }else if($ks != $key && is_string($vs)) {
      continue;
    }else if($ks == $key) {
      $v = $vs;
      break;
    }
  }
  return $v; 
  //var_dump($v);exit; //这里是有值的 为1
  //echo $v;  //测试这样可以直接输出
}
$va = search_val('6a34', $array);
var_dump($va); //$va始终为空 
</code>

这个方法的意思就是给一下标$key取出对应val的值,我在方法最后return $v,然后我把这个return的结果赋给一个值$va,这个值始终为空,但是我在方法最后打印$v的时候是有值的,为什么会这样呢?是变量作用域的问题还是我代码写的不规范导致的?求解

function 改成下面这样,你这逻辑有点问题,方法间数据交互要使用return,最后取得值可当是search_val给你返回的所以直接在这边return。

<code class="php">
 function search_val($key, $arr) {
            foreach ($arr as $ks => $vs) {
                if($ks != $key && is_array($vs)) {
                    return search_val($key, $vs);
                }else if($ks != $key && is_string($vs)) {
                    continue;
                }else if($ks == $key) {
                    return $vs;
                }
            }
            //return $v;
            //var_dump($v);
        }
        </code>

直白的说递归就是自己调用自己。
而你的代码里面函数调用自身却没有获取其返回值。
其次要注意对自身返回结果的处理。

<code>function search_val($key, $arr) {
    if (!is_array($arr) || empty($arr)) {
        return false;
    } else {
        foreach ($arr as $k => $v) {
            if ($k === $key) {
                return $v;
            } 
            if (is_array($v) && !empty($v)) {
                $re =  search_val($key, $v);
                if ($re !== false) {
                    return $re;
                } 
            } 
            continue;
        }
    }
    return false;
}</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn