我有两个这样的数组:
$arr = Array (1, 2, 3 ,4 ,5, 6 ,7 ,8 ) ;
还有这个:
$arr2 = Array (7, 6, 5,8 ,3 ,2 ,1, 4 )
这些数组的对是具有相同密钥($arr-$arr2ECC)的数字。
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)
你在想什么?
发布于 2011-10-26 21:33:27
在对原始脚本进行了一些更正之后,这似乎是可行的:
$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
)
发布于 2011-10-26 21:15:51
我认为最里面的if是错的:
if($x1 != $y2 && $x2 !=$y1){
$ok = 1;
}
else{
$ok=0;
}
$ok
在每次迭代中都会被覆盖;$ok
将始终具有该值,就像您刚刚省略了循环并设置了$j=count($arr2)-1
一样,这不可能是正确的。
可能还有其他问题..。
我还注意到你的数据结构有问题。有几件事:
$arr[i][0]
和$arr[i][1]
作为配对。这样,就不可能意外地错配对了。发布于 2011-10-26 21:48:58
另一种方式:
$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8);
$arr2 = array(7, 6, 5, 8, 3, 2, 1, 4);
function concat(&$item, $key, $arr)
{
$item2 = $arr[$key];
if($item < $item2)
$item .= "-" . $item2;
else
$item = $item2 . "-" . $item;
}
array_walk($arr1, 'concat', $arr2);
print_r($arr1);
$arr = array_unique($arr1);
print_r($arr);
https://stackoverflow.com/questions/7902996
复制相似问题