首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >array_chunk,防止重复块

array_chunk,防止重复块
EN

Stack Overflow用户
提问于 2020-08-02 15:50:14
回答 2查看 153关注 0票数 0

我有很多人,比如说:

$a = ['John', 'Amy', 'Bill', 'Jim']

数组可以有4个以上的元素。

我需要为每个元素与同一数组中的另一个元素生成2个配对,而不生成重复配对(在可以避免的情况下),也不需要将一个元素与其自身配对:

代码语言:javascript
复制
    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对而不创建重复配对或与其自身配对的正确方法是什么?

提前谢谢。

下面是一个不完全防止重复的尝试的例子:

代码语言:javascript
复制
$duplicate_array = $a;
        shuffle($duplicate_array);
        $combined = array_merge($duplicate_array, $a);
        $combined = array_chunk($combined,2);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-02 16:30:47

只需做两个循环,并简单地检查名称是否相同。

代码语言:javascript
复制
<?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);

结果:

代码语言:javascript
复制
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个循环等等。

代码语言:javascript
复制
<?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);
票数 0
EN

Stack Overflow用户

发布于 2020-08-02 16:43:16

可以将每个名称与数组中的下列名称配对。

代码语言:javascript
复制
$names = ['John', 'Amy', 'Bill', 'Jim'];

$n = count($names);
foreach ($names as $index => $name) {
    $pairs[] = [$name, $names[($index + 1) % $n]];
}

如果这两对需要随机化,那么在进行配对之前,您可以先对名字进行洗牌。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63218047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档