我有很多人,比如说:
$a = ['John', 'Amy', 'Bill', 'Jim']
数组可以有4个以上的元素。
我需要为每个元素与同一数组中的另一个元素生成2个配对,而不生成重复配对(在可以避免的情况下),也不需要将一个元素与其自身配对:
Array
(
[0] => Array
(
[0] => John
[1] => Amy
)
[1] => Array
(
[0] => Amy
[1] => Bill
)
[2] => Array
(
[0] => Bill
[1] => Jim
)
[3] => Array
(
[0] => John
[1] => Jim
))
我尝试过一些草率的技术,例如复制数组,将两者合并,并将它们分块成对。重复配对,相同的元素配对不断出现,所以在合并和分块数组之前,我已经尝试过像shuffle($duplicated_array)和array_reverse($duplicated_array)这样的东西,仍然可以存在重复配对。
为数组中的每个元素生成2对而不创建重复配对或与其自身配对的正确方法是什么?
提前谢谢。
下面是一个不完全防止重复的尝试的例子:
$duplicate_array = $a;
shuffle($duplicate_array);
$combined = array_merge($duplicate_array, $a);
$combined = array_chunk($combined,2);发布于 2020-08-02 16:30:47
只需做两个循环,并简单地检查名称是否相同。
<?php
$arr = ['John', 'Amy', 'Bill', 'Jim'];
$result = [];
foreach ($arr as $a) {
foreach ($arr as $b) {
if ($a === $b) continue;
$result[] = [$a, $b];
}
}
print_r($result);结果:
Array
(
[0] => Array
(
[0] => John
[1] => Amy
)
[1] => Array
(
[0] => John
[1] => Bill
)
[2] => Array
(
[0] => John
[1] => Jim
)
[3] => Array
(
[0] => Amy
[1] => John
)
[4] => Array
(
[0] => Amy
[1] => Bill
)
[5] => Array
(
[0] => Amy
[1] => Jim
)
[6] => Array
(
[0] => Bill
[1] => John
)
[7] => Array
(
[0] => Bill
[1] => Amy
)
[8] => Array
(
[0] => Bill
[1] => Jim
)
[9] => Array
(
[0] => Jim
[1] => John
)
[10] => Array
(
[0] => Jim
[1] => Amy
)
[11] => Array
(
[0] => Jim
[1] => Bill
)
)想要一个中间名,添加3个循环等等。
<?php
$arr = ['John', 'Amy', 'Bill', 'Jim'];
$result = [];
foreach ($arr as $a) {
foreach ($arr as $b) {
if ($a === $b) continue;
foreach ($arr as $c) {
if ($a === $c || $b === $c) continue;
$result[] = [$a, $b, $c];
}
}
}
print_r($result);发布于 2020-08-02 16:43:16
可以将每个名称与数组中的下列名称配对。
$names = ['John', 'Amy', 'Bill', 'Jim'];
$n = count($names);
foreach ($names as $index => $name) {
$pairs[] = [$name, $names[($index + 1) % $n]];
}如果这两对需要随机化,那么在进行配对之前,您可以先对名字进行洗牌。
https://stackoverflow.com/questions/63218047
复制相似问题