使用PHP生成组合

时间:2014-11-06 22:14:48

标签: php combinatorics

所以我有以下字符(alt符号):

¯ ˜ ” “ ’ ‘ ¨ ´ ¹ ² ³ ` ° ⁿ

我尝试做的很简单:在它们之间生成所有可能的组合,最长为2。话虽这么说,几代样本看起来都是这样的:

¯ ^ ¨ ³ ^ “

此外,他们需要分开,让我们说XOR运算符。我在考虑以下情况:

$array = array('¯', '˜' ,'”', '“', '’', '‘', '¨', '´', '¹', '²', '³', '`', '°', 'ⁿ');

foreach ($array as $element) {
    echo $element ' ^ ' //..;
}

我无法实现我的逻辑。如何将它们分成两个元素对并将它们之间的每个可能组合分开而不重复?

编辑:


虽然我设法让它像这样使用常规字母:

<?php
ini_set('max_execution_time', '65');

$values = 'ABCD';
container(strlen($values), 0 );

function container($length, $pos, $out = '' ){
    global $values;

    for ($i = 0; $i < $length; ++$i){
  if ($pos < $length ){
    container($length, $pos + 1, $out . $values[$i]);
  }
    }

    if(strlen($out) <= 2){
  echo $out . '<br />';
  }
}

?>

当使用alt符号作为迭代的值时,我结束了死锁。

1 个答案:

答案 0 :(得分:0)

使用一些不同的字符:

$chars = array('a','b','c','d','e','f');
for ($i = 0; $i < (count($chars) - 1); $i++) {   // count()-1 to prevent f^f
    for ($j = $i+1; $j < count($chars); $j++) {  // $i+1 to prevent a^a 
        echo "$chars[$i] ^ $chars[$j]\n";
    }
}

输出:

a ^ b
a ^ c
a ^ d
a ^ e
a ^ f
b ^ c
b ^ d
b ^ e
b ^ f
c ^ d
c ^ e
c ^ f
d ^ e
d ^ f
e ^ f

这假设a ^ a是一个骗局,而b^aa^b是相互欺骗。