1

我今天在编码过程中遇到了一个难题。我想分享并从你那里得到帮助。

我对 MySql 数据库进行查询并以数组形式获取结果。所以我有这样的输出:

 $rows=array(n) { // for each n value elements can have different values
    ["val1"] => string(3) "abc"
    ["val2"] => string(3) "def"
    ["val3"] => string(3) "ghi"
    ["val4"] => string(3) "jkl"
}

因此,例如,假设 n=4 并且我需要创建唯一的对,相同数量的对不会出现在队列中。
我需要的是如示例中所示:

n= 1, 2, 3, 4

我需要得到的对:

1-2, 1-3, 1-4, 2-3, 2-4, 3-4

我需要避免像2-1. 3-1, 4-1, 3-2, 4-2, 4-3 and 1-1, 2-2, 3-3, 4-4.
对于每一对,我将检查这对数组是否相等。
我怎样才能做到这一点?

4

3 回答 3

1
<?php

$n = 4;

for($i = 1; $i<=$n; $i++)
    for($x = 1; $x<=$n; $x++)
        if($i != $x && !isset($array[$x][$i]))
            $array[$i][$x] = '';


//echo '<pre>';
//var_dump($array);
//echo '</pre>';
?>

输出使用

<?php

for($i = 1; $i<=$n; $i++)
    for($x = 1; $x<=$n; $x++)
        if(isset($array[$i][$x]))
            echo $i.'-'.$x.', ';

?>

这将是:

如果$n = 4

1-2、1-3、1-4、2-3、2-4、3-4、

如果$n = 10

1-2、1-3、1-4、1-5、1-6、1-7、1-8、1-9、1-10、2-3、2-4、2-5、2- 6、2-7、2-8、2-9、2-10、3-4、3-5、3-6、3-7、3-8、3-9、3-10、4-5、 4-6、4-7、4-8、4-9、4-10、5-6、5-7、5-8、5-9、5-10、6-7、6-8、6- 9、6-10、7-8、7-9、7-10、8-9、8-10、9-10、

于 2013-11-15T01:27:45.040 回答
1

I'm using the array and I just remove the elements once all the pairs have been made, probably there's a better solution using only for's

  $n = 5;
$array = array("abc","def","ghi","jkl","mno");
$r_temp = $array;
$r_result = array();
foreach($array as $r){
    $i = 0;
    while($i < $n-1){
        array_push($r_result,$r_temp[0].$r_temp[$i+1]);
        $i++;
    }
    $n--;
    array_shift($r_temp); //Remove the first element since all the pairs are used
}

print_r($r_result);

Output would be

Array ( [0] => abcdef [1] => abcghi [2] => abcjkl [3] => abcmno [4] => defghi [5] => defjkl [6] => defmno [7] => ghijkl [8] => ghimno [9] => jklmno )
于 2013-11-15T01:40:23.463 回答
0

这是一个古老的问题,但它看起来像是XY Problem的一个很好的例子。

首先,直接回答您的问题:

$n = 4;
$pairs = [];
for ($i = 1; $i <= $n; ++$i) {
    for ($j = $i+1; $j <= $n; ++$j) {
        $pairs[] = [$i, $j];
    }
}

(你可以在这里查看)。

但是,如果我正确理解您要查找的内容,则直接使用 SQL 查询会更容易:

SELECT mycolumn, COUNT(*) AS total FROM mytable GROUP BY mycolumn HAVING total > 1;

此查询将返回所有重复的列条目mytable.mycolumn和出现次数。

于 2022-03-01T18:01:26.110 回答