搜尋

首頁  >  問答  >  主體

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

<?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始终为空

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

高洛峰高洛峰3064 天前684

全部回覆(1)我來回復

  • 三叔

    三叔2016-10-22 10:40:38

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


    回覆
    0
  • 取消回覆