与数组元素的组合

时间:2012-01-20 00:53:49

标签: php arrays

我有这段代码:

$um = array("PHP", "JAVA", "MySQL")


 $a = count($um)

       for ($i = 0; $i < $a; $i++) {
            for ($x = $i + 1; $x <$a; $x++) {
                $arr1 [] = array($um[$i],$um[$x]);
            }
        }

这将输出类似这些组合的内容:

PHP[0] JAVA[1]
PHP[0] MySQL[2]
JAVA[1] MySQL[2]

嗯,没有任何问题。

但是现在,我想将输出更改为:

PHP[0] JAVA[1]
JAVA[1] MySQL[2]
MySQL[2] PHP[0]

三个数组元素的逻辑相同,甚至是10,依此类推。

对此有何想法?

2 个答案:

答案 0 :(得分:1)

只需使用模运算:你想对索引(i,i + 1)进行配对,如果i+1变得太大,for ($i = 0; $i < $a; $i++) { echo $um[$i], ', ', $um[($i+1) % $a] } 会回绕到0。

$a=3

因此0, 1 1, 2 2, 0 (since 3 % 3==0) 根据索引显示:

{{1}}

Modulus Operator docs

答案 1 :(得分:1)

// make a copy of the array
$array2 = $array;

// rotate the entries by one
$array2[] = array_shift($array2);

// combine the elements
$combined = array_map(function () { return func_get_args(); }, $array, $array2);