<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>