无法访问函数返回变量

时间:2014-02-21 06:53:48

标签: php

无法返回函数值,如果我在函数内部打印了值,当我创建返回变量时,它将返回零我的代码

    function permute($str,$i,$n) {
$b="";
   if ($i == $n)
        $b .=$str.",";
   else {
        for ($j = $i; $j < $n; $j++) {
          swap($str,$i,$j);
          permute($str, $i+1, $n);
          swap($str,$i,$j); // backtrack.
       }

   }

   return $b;


}
function swap(&$str,$i,$j) {
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}   
$str = "375";
$test=permute($str,0,strlen($str));
echo $test;

3 个答案:

答案 0 :(得分:2)

  function permute($str,$i,$n) {
   ....
          $b . = permute($str, $i+1, $n);
   ....

   return $b;


}

您没有使用内部呼叫的结果。

答案 1 :(得分:0)

您必须使用循环中的返回值

<?php
function permute($str,$i,$n){
    $b=NULL;
    if ($i == $n){
        $b= $str.",";
     }else {
        for ($j = $i; $j < $n; $j++){
        swap($str,$i,$j);
        $b.=permute($str, $i+1, $n); //ERROR HERE
        swap($str,$i,$j); // backtrack.
        }
    }
    return $b;
}

答案 2 :(得分:0)

这并没有告诉你为什么你的函数出错了,但这就是你如何生成一系列可能的排列:

// permute prefix $s with set $r and store results in $a
function permute($r, array &$a, $s = '')
{
    if (!strlen($r)) {
        $a[] = $s; // store result
        return;
    }

    for ($i = 0; $i < strlen($r); ++$i) {
        // recurse
        permute(substr_replace($tmp = $r, '', $i, 1), $a, $s . $r[$i]);
    }
}

$str = "375"; 
$res = [];

permute($str, $res);

print_r($res);