찾다

 >  Q&A  >  본문

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

<?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일 전676

모든 응답(1)나는 대답할 것이다

  • 三叔

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

    function 改成下面这样,你这逻辑有点问题,方法间数据交互要使用return,最后取得值可当是search_val给你返回的所以直接在这边return。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

     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
  • 취소회신하다