【问题标题】:Call a function within a function display both within array调用函数内的函数同时显示在数组内
【发布时间】:2014-08-18 10:24:32
【问题描述】:

如何从函数中调用函数?

function tt($data,$s,$t){
    $data=$data;
    echo '[[';
    print_r($data);
    echo ']]';
    if($t==0){
        $data[]=$s;
        tt($data,'two',1);
    }else{
        $data[]=$s;
    }
    return $data;
}
print_r(tt('','one',0));

我希望在数组中显示“两个”,例如

$o[]='one';
$o[]='two';
print_r($o);

【问题讨论】:

  • 你调用函数很好,但你没有将数据传回。
  • 你的第一条指令$data = $data 什么也没做...
  • 如何通过?

标签: php arrays function recursion


【解决方案1】:
function tt($s, $t, array $data = array()) {
    $data[] = $s;
    if ($t == 0) {
        $data = tt('two', 1, $data);
    }
    return $data;
}

print_r(tt('one', 0));

这就是真正需要的。

  1. 将数组作为最后一个参数并使其成为可选参数,因为在初始调用时不需要它。
  2. 当递归调用tt 时,您需要“捕获”它的返回数据,否则递归调用根本没有任何持久价值。
  3. 不需要else,因为无论如何您都会将条目附加到数组中,并且不需要写两次。

【讨论】:

    【解决方案2】:

    试试这个(注意函数签名,数组是通过ref传递的&$data):

    function tt(&$data,$s,$t){
        echo '[[';
        print_r($data);
        echo ']]';
        if($t==0){
            $data[]=$s;
            tt($data,'two',1);
        }else{
            $data[]=$s;
        }
        return $data;
    }
    
    $array = [];
    tt($array,'one',0);
    print_r($array);
    /**
    Array
     (
       [0] => one
       [1] => two
     )
    */
    

    【讨论】:

    • 很高兴为您提供帮助,虽然@deceze 清理了该功能,但您也应该考虑到这一点 :-)
    【解决方案3】:

    试试这个

     function tt($data,$s,$t){
            global $data;
    
            if($t==0){
                $data[]=$s;
                tt($data,'two',1);
            }else{
                $data[]=$s;
            }
            return $data;
        }
       print_r(tt('','one',0));
    

    输出:

    Array
    (
        [0] => one
        [1] => two
    )
    

    DEMO

    【讨论】:

    • 当我使用它时,它会将我的其他函数复合到同一个数组中。
    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 2022-08-19
    • 2020-05-06
    • 2013-11-05
    • 2020-12-03
    • 2012-01-12
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多