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

博客内容讲述了如何在PHP中编写一个函数,该函数接受两个数组,并返回一个包含不重复配对的数组。原始代码存在问题,经过修正后,函数能够正确地排除掉重复的对并返回预期结果,如1-7, 2-6, 3-5和4-8等配对。
摘要由CSDN通过智能技术生成

我有两个这样的数组:

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

还有这个:

$arr2 = Array (7, 6, 5,8 ,3 ,2 ,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, 2, 3, 4 ,5, 6 ,7 ,8);

$arr2 = Array (7, 6, 5, 8 ,3 ,2 ,1, 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

)

标签:php,algorithm,arrays

来源: https://codeday.me/bug/20190709/1417904.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值