Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP获取所有可能的n个元素对,但不重复 我需要什么_Php_Arrays - Fatal编程技术网

使用PHP获取所有可能的n个元素对,但不重复 我需要什么

使用PHP获取所有可能的n个元素对,但不重复 我需要什么,php,arrays,Php,Arrays,我需要所有可能的n个元素对,没有重复项。假设我有以下阵列: $arr1 = [2, 4, 6, 7]; $arr2 = [6, 5, 4, 11]; $arr3 = [22, 1, 5, 8]; $final = [ 'a' => $arr1, 'b' => $arr2, 'c' => $arr3 ]; 我现在需要的是: $pairs = [ 'ab' => [$arr1, $arr2], 'ac' => [$arr1

我需要所有可能的n个元素对,没有重复项。假设我有以下阵列:

$arr1 = [2, 4, 6, 7];
$arr2 = [6, 5, 4, 11];
$arr3 = [22, 1, 5, 8];

$final = [
    'a' => $arr1, 
    'b' => $arr2, 
    'c' => $arr3
];
我现在需要的是:

$pairs = [
    'ab' => [$arr1, $arr2],
    'ac' => [$arr1, $arr3],
    'bc' => [$arr2, $arr3]
];
我得到了什么 我要说的是:

function getPairs($array) {
    $n = count($array);

    $finalArray = [];
    $i = 0;
    foreach ($array as $a) {
        for ($x = $n-1; 0 <= $x; $x--) {
            if ($i != $x) {
                $finalArray[] = [$array[$i], $array[$x]];
            }
        }
        $i++;
    }

    return $finalArray;
}
我的方法有两个问题:

  • 循环生成
    $x=0
    $i=1
    和更高版本的
    $i=1
    $x=0
    ,从而生成一个重复的数组
  • 我用这个拿不到钥匙(
    ab
    ac
    cb

  • 与此问题类似,但使用数组键:

    如果我正确理解任务,此代码应该可以工作:

    $a = [[2, 4, 6, 7],[6, 5, 4, 11],[22, 1, 5, 8]];
    $result = [];
    $n = count($a);
    
    for($i = 0; $i < $n-1; $i++) {
        for($j = $i+1; $j < $n; $j++) {
            $result[(string)$i.(string)$j] = [$a[$i], $a[$j]];
        }
    }
    
    print_r($result);
    
    $a=[[2,4,6,7]、[6,5,4,11]、[22,1,5,8];
    $result=[];
    $n=计数($a);
    对于($i=0;$i<$n-1;$i++){
    对于($j=$i+1;$j<$n;$j++){
    $result[(string)$i.(string)$j]=[$a[$i],$a[$j]];
    }
    }
    打印(结果);
    
    为避免重复,请确保配对中的一个成员始终具有“lower”键。这将避免获得成对的
    ac
    ca

    要获取所需的字母键,请使用
    array\u keys()
    从原始数组中提取键

    function getPairs($array) {
        $n = count($array);  
        $keys = array_keys($array);  
        $finalArray = [];
        $i = 0;
        foreach ($array as $a) {
            for ($x = $n-1; $i < $x; $x--) {
                $key1 = $keys[$i];
                $key2 = $keys[$x];
                $finalArray[$key1.$key2] = [$array[$key1], $array[$key2]];
            }
            $i++;
        }    
        return $finalArray;
    }
    
    函数getPairs($array){
    $n=计数($array);
    $keys=数组\ U键($array);
    $finalArray=[];
    $i=0;
    foreach($a数组){
    对于($x=$n-1;$i<$x;$x--){
    $key1=$keys[$i];
    $key2=$keys[$x];
    $finalArray[$key1.$key2]=[$array[$key1],$array[$key2]];
    }
    $i++;
    }    
    返回$finalArray;
    }
    
    以下是其他两个答案的“混合”:

    $arr1=[2,4,6,7];
    $arr2=[6,5,4,11];
    $arr3=[22,1,5,8];
    $final=[
    “a”=>arr1美元,
    “b”=>2美元,
    “c”=>3美元
    ];
    $n=计数($final);
    $keys=数组_键($final);
    $pairs=[];
    对于($i=0;$i<$n-1;$i++){
    对于($j=$i+1;$j<$n;$j++){
    $pairs[$keys[$i].$keys[$j]=[$final[$keys[$i]],$final[$keys[$j]];
    }
    }
    打印(双);
    
    谢谢我的朋友,但是钥匙不见了@这是正确的:)“始终保证一对中的一个成员始终拥有“下”键。”这是丢失的一块。非常感谢,你太棒了!
    function getPairs($array) {
        $n = count($array);  
        $keys = array_keys($array);  
        $finalArray = [];
        $i = 0;
        foreach ($array as $a) {
            for ($x = $n-1; $i < $x; $x--) {
                $key1 = $keys[$i];
                $key2 = $keys[$x];
                $finalArray[$key1.$key2] = [$array[$key1], $array[$key2]];
            }
            $i++;
        }    
        return $finalArray;
    }