加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何从两个数组中删除重复对?

发布时间:2020-12-13 22:32:29 所属栏目:PHP教程 来源:网络整理
导读:我有两个这样的数组: $arr = Array (1,2,3,4,5,6,7,8 ) ; 还有这个: $arr2 = Array (7,8,1,4 ) 这些数组的对是具有相同键的数字($arr [0] – $arr2 [0] ecc.) 1-72-63-54-85-36-27-18-4 你可以看到有一些重复的对,如1-7和7-1,2-6和6-2,3-5和5-3,4-8和8-4.
我有两个这样的数组:

$arr = Array (1,2,3,4,5,6,7,8 ) ;

还有这个:

$arr2 = Array (7,8,1,4 )

这些数组的对是具有相同键的数字($arr [0] – $arr2 [0] ecc.)

1-7
2-6
3-5
4-8
5-3
6-2
7-1
8-4

你可以看到有一些重复的对,如1-7和7-1,2-6和6-2,3-5和5-3,4-8和8-4.

我需要一个函数来复制这两个数组,并返回一个数组与每一对.

例如,这是函数应返回的内容:

Array ( [0] => 1 [1] => 7 [2] => 2 [3] => 6 [4] => 3 [5] => 5 [6] => 4 [7] => 8 )

你可以看到对是:1-7,2-6,3-5和4-8.

我已经使这个功能无法正常工作:

function free_pairs($arr,$arr2){
$ok = 0;
$ris = array();
$indice_ris=0;
for ($i=1; $i <=count($arr) ; $i++) { 
    $x1 = $arr[$i];
    $x2 = $arr2[$i];
    for ($j=1; $j <= count($arr2) ; $j++) { 
        $y1 = $arr[$j];
        $y2 = $arr2[$j];
        if($x1 != $y2 && $x2 != $y1){
            $ok = 1;
        } else {
            $ok = 0;
        }
    }
    if ($ok == 1) {
        $ris[$indice_ris] = $x1;
        $ris[$indice_ris+1] = $x2;
        $indice_ris = $indice_ris+2;
        $ok = 0;
    }
    return $ris;
}

我认为问题在于:

if($x1 != $y2 && $x2 !=$y1)

你有什么想法?

解决方法

在对原始脚本进行一些更正后,这似乎有效:

$arr1 = Array (1,8);
$arr2 = Array (7,4);
$res = free_pairs($arr1,$arr2);
print_r($res);

function free_pairs($arr,$arr2){
    $ris = array();
    for ($i = 0; $i < count($arr); $i++) { 
        $x1 = $arr[$i];
        $x2 = $arr2[$i];
        $ok = 0;
        for ($j = $i+1; $j < count($arr2); $j++) { 
            $y1 = $arr[$j];
            $y2 = $arr2[$j];
            if($x1 == $y2 && $x2 == $y1){
                $ok = 1;
            }
        }
        if ($ok == 0) {
            $ris[] = $x1;
            $ris[] = $x2;
        }
    }
    return $ris;
}

输出:

Array
(
    [0] => 5
    [1] => 3
    [2] => 6
    [3] => 2
    [4] => 7
    [5] => 1
    [6] => 8
    [7] => 4
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读