Php 合并具有相同值的数组

Php 合并具有相同值的数组,php,arrays,siblings,array-merge,Php,Arrays,Siblings,Array Merge,我在输入端有一个带有图形元素ID的数组,我需要找到它们的组。我试图使用array_search和array_marge,但没有成功 我有很多兄弟姐妹: 'siblings' => array (size=6) 0 => array (size=2) 0 => int 0 1 => int 1 1 => array (size=2) 0 =

我在输入端有一个带有图形元素ID的数组,我需要找到它们的组。我试图使用array_search和array_marge,但没有成功

我有很多兄弟姐妹:

'siblings' => 
    array (size=6)
      0 => 
        array (size=2)
          0 => int 0
          1 => int 1
      1 => 
        array (size=2)
          0 => int 2
          1 => int 3
      2 => 
        array (size=2)
          0 => int 3
          1 => int 5
      3 => 
        array (size=2)
          0 => int 4
          1 => int 6
      4 => 
        array (size=2)
          0 => int 4
          1 => int 7
      5 => 
        array (size=2)
          0 => int 6
          1 => int 7
我需要如下输出:

'groups' => 
    array (size=6)
      0 => 
        array (size=2)
          0 => int 0
          1 => int 1
      1 => 
        array (size=2)
          0 => int 2
          1 => int 3
          2 => int 5
      2 => 
        array (size=2)
          0 => int 4
          1 => int 6
          2 => int 7
    $groups[] = array_unique(array_merge($siblings[0]));
    $groups[] = array_unique(array_merge($siblings[1],$siblings[2]));
    $groups[] = array_unique(array_merge($siblings[3],$siblings[4],$siblings[5]));

    var_dump($groups); // will output the previous output of groups
我可以通过以下方式输出:

'groups' => 
    array (size=6)
      0 => 
        array (size=2)
          0 => int 0
          1 => int 1
      1 => 
        array (size=2)
          0 => int 2
          1 => int 3
          2 => int 5
      2 => 
        array (size=2)
          0 => int 4
          1 => int 6
          2 => int 7
    $groups[] = array_unique(array_merge($siblings[0]));
    $groups[] = array_unique(array_merge($siblings[1],$siblings[2]));
    $groups[] = array_unique(array_merge($siblings[3],$siblings[4],$siblings[5]));

    var_dump($groups); // will output the previous output of groups

但我需要能够大规模工作的功能。

也许类似的功能可以工作。它不会比较兄弟姐妹之间的差异。相反,它会展平阵列,删除重复项,然后将其分成3组

<?php

$siblings = array(
    array(0, 1),
    array(2, 3),
    array(3, 5),
    array(4, 6),
    array(4, 7),
    array(6, 7),
);

$merged = array();
$grouped = array();

for ($i = 0; $i < count($siblings); $i++) {
    array_push($merged, $siblings[$i][0]);
    array_push($merged, $siblings[$i][1]);
}

$merged = array_unique($merged);
$merged = array_chunk($merged, 3);

print_r($merged);

?>

它可能效率不高,但却很有效。通常的想法是在阵列中循环,检查电流与剩余内部阵列的交点。如果存在交集,只需将它们合并到当前数组中,否则准备下一个数组集(以循环并提取下一个组):

结果:

array(1) { 
   ["groups"]=> array(3) {
                [0]=> array(2) { 
                       [0]=> int(0) 
                       [1]=> int(1) } 
                [1]=> array(3) { 
                       [0]=> int(2) 
                       [1]=> int(3) 
                       [3]=> int(5) } 
                [2]=> array(3) { 
                       [0]=> int(4) 
                       [1]=> int(6) 
                       [2]=> int(7) } } }

你是如何确定组的?我可能假设您想要3个组,但为什么示例中的第一个组只有2个?组是包含合并的兄弟数组的数组。如果兄弟数组中的一个值出现在另一个数组中,这些数组应该合并。啊,我现在明白你的意思了。感谢您的澄清。在这种情况下,使用
array\u pop
可能比
array\u shift
更好。想法是从
$round
中获取并删除每个元素。但是,输出元素的顺序将发生变化(尽管我认为这不重要)。@user3173246很高兴知道,如果有帮助,请接受答案(通过单击灰色记号)。我知道你是新来的。