在PHP中使用for循环中的模式

时间:2015-03-01 13:03:56

标签: php

我试图创建一个程序来计算字母的所有排序可能性,这是它的逻辑。你只需输入调用函数,就有2 ^ n(n是输入值)的可能性。如果输入3,我们知道存在8种情况,系统通过计算输入值生成自动字符串,例如:ABC。并且类似:

ABC
ABc
AbC
Abc
aBC
aBc
abC
abc

正如您所看到的,通过将可能性每次分为2,将字母大写或小写。在我的for循环中,我无法解决这个问题,你能帮助我吗?这是代码:

 function f($hyb, $rand=false) {
    $result="";
    $characters=array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
    if ($rand) {
        shuffle($characters);
    }
    for ($i=1; $i<=pow(2, $hyb); $i++) {
        $string=implode(array_slice($characters, 0, $hyb));
        if ($i%2==1) {
        }
        else if ($i%2==0) {
        }
    }
    return $result;
}
echo f(2);

应该返回AB Ab aB ab

1 个答案:

答案 0 :(得分:2)

以下功能可以满足您的需求。

function f($x) {
  $result = array();
  $characters = range("A", "Z");
  $max = pow(2, $x);
  for ($i = 0; $i < $max; $i++) {
    $val = "";
    $bit = pow(2, $x);
    for ($y = 0; $y < $x; $y++) {
      $bit >>= 1;
      $chr = $characters[$y];
      if ($i & $bit) {
        $chr = strtolower($chr);
      }
      $val .= $chr;
    }
    $result[] = $val;
  }
  return $result;
}

与你的函数有一些不同之处:没有实现shuffle函数,上面的函数返回一个数组而不是一个字符串。