使用PHP获取所有可能的n个元素对,但不重复 我需要什么
我需要所有可能的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
$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;
}