>  기사  >  백엔드 개발  >  PHP의 재귀 메서드에서 값을 반환하는 데 문제가 있습니다.

PHP의 재귀 메서드에서 값을 반환하는 데 문제가 있습니다.

WBOY
WBOY원래의
2016-10-22 00:14:11887검색

<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의 결과를 value $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의 결과를 value $va. 이 값은 항상 비어 있는데 메소드 끝에 $v를 인쇄하면 값이 나오는 이유는 무엇입니까? 변수 범위에 문제가 있습니까? 아니면 내 코드의 불규칙성으로 인해 발생합니까? 해결

함수를 다음과 같이 변경합니다. 메소드 간 데이터 상호 작용을 위해 return을 사용해야 합니다. 최종적으로 얻은 값은 search_val이 반환하는 것으로 간주할 수 있으므로 여기로 반환하십시오.

<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>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.