与数组元素的组合


combination with array elements

我有这个代码:

$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个,逻辑将是相同的,依此类推

你知道吗?

只需使用模运算:您希望对索引(i,i+1)进行配对,如果i+1变得太大,则它会包装为0。

for ($i = 0; $i < $a; $i++) {
    echo $um[$i], ', ', $um[($i+1) % $a]
}

因此,对于$a=3,它根据索引显示:

0, 1
1, 2
2, 0 (since 3 % 3==0)

Modulus Operator docs

// 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);