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

來源:互聯網
上載者:User
 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始終為空白 

這個方法的意思就是給一下標$key取出對應val的值,我在方法最後return $v,然後我把這個return的結果賦給一個值$va,這個值始終為空白,但是我在方法最後列印$v的時候是有值的,為什麼會這樣呢?是變數範圍的問題還是我代碼寫的不規範導致的?求解

回複內容:

 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始終為空白 

這個方法的意思就是給一下標$key取出對應val的值,我在方法最後return $v,然後我把這個return的結果賦給一個值$va,這個值始終為空白,但是我在方法最後列印$v的時候是有值的,為什麼會這樣呢?是變數範圍的問題還是我代碼寫的不規範導致的?求解

function 改成下面這樣,你這邏輯有點問題,方法間資料互動要使用return,最後取得值可當是search_val給你返回的所以直接在這邊return。

 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);        }        

直白的說遞迴就是自己調用自己。
而你的代碼裡面函數調用自身卻沒有擷取其傳回值。
其次要注意對自身返回結果的處理。

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;}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.