PHP一個遞歸方法傳回值的問題

WBOY
發布: 2016-10-22 00:14:11
原創
893 人瀏覽過

<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>
登入後複製
相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板