-1

如何找到两个数字之间的匹配项。如果 的重量roosters_A等于 的重量roosters_B。如果匹配,这两对将不再匹配,我有一个未设置的功能。

这是我的代码:

$roosters = array(
                      array('weight' => 2000),
                      array('weight' => 1810),
                      array('weight' => 1810),
                      array('weight' => 1600),
                      array('weight' => 1800),
                      array('weight' => 1915),
                      array('weight' => 1700),
                      array('weight' => 2000),
                      array('weight' => 1915),
                      array('weight' => 1800)
                      );

        if(sizeof($roosters) >= 2) {
         $i = 1;
            $match = 0;
             $roosters_A  =  $roosters[0];
             while(sizeof($roosters) > $i and $match == 0) {
                 $roosters_B  =  $roosters[$i];
                 if($roosters_A['weight'] == $roosters_B['weight']) {
                    echo "$i. With Pair ".$roosters_A['weight'].' '.$roosters_B['weight'].'<br>';
                    $match = 1;
                 }  else {
                    echo "$i. No Pair ".$roosters_A['weight'].' '.$roosters_B['weight'].'<br>';
                    $match = 0;
                 }
                 $i++;  

                 unset($roosters_B);
             } 

            if($match == 1) { 
                unset($roosters_A);
            }

        }

我想这样显示:

1. With Pair 2000 2000
2. With Pair 1810 1810
3. No Pair 1600 
4. With Pair 1800 1800
5. With Pair 1915 1915
5. No Pair 1700 
6. With Pair 2000 2000
7. With Pair 1915 1915
8. With Pair 1800 1800

你能帮助我吗?我很难找到一种方法来匹配它而不重复并且不使用任何数据库来显示此记录。非常感谢那些帮助我的人。我想这对你来说很容易。

4

2 回答 2

0

[更新为处理 3 对或更多对]

你可以这样做 :

$roosters = array(
  array('weight' => 2000),
  array('weight' => 1810),
  array('weight' => 1810),
  array('weight' => 1600),
  array('weight' => 1800),
  array('weight' => 1915),
  array('weight' => 1700),
  array('weight' => 2000),
  array('weight' => 1915),
  array('weight' => 1800),
  //added
  array('weight' => 1800),
  array('weight' => 1700),
  array('weight' => 2000),
  array('weight' => 1917),
  array('weight' => 1800)
);

$result=array();
foreach ($roosters as $rooster) {
    $key=$rooster['weight'];
    if (isset($result[$key])) {
        $result[$key]=$result[$key]+1;
    } else {
        $result[$key]=1;
    }
}

foreach ($result as $key=>$value) {
    switch ($value) {
        case 1 : echo 'No Pair'; break;
        case 2 : echo 'With Pair'; break;
        case 3 : echo 'Three Pairs'; break;
        default : echo 'Multiple Pairs'; break;
    }
    for ($i=0;$i<$value;$i++) {
        echo '&nbsp;'.$key;
        if ($i==1) break; //break if more than two
    }
    echo '<br>';
}

输出

Three Pairs 2000 2000
With Pair 1810 1810
No Pair 1600
Multiple Pairs 1800 1800
With Pair 1915 1915
With Pair 1700 1700
No Pair 1917

上面构建了一个$result-array ,它拥有 unique weights,以及其中有多少weights存在于$rooster. 最后输出结果,通知每个weight.

于 2013-09-30T10:42:19.703 回答
0

重新发明轮子是个好主意。祝你好运!

但是,有时甚至PHP也有一些可用的功能,您可能会使用。

在您的情况下,例如这两个

assuming comparing array $roosters_A vs. $roosters_B
and $roosters_A/B is prepared like $roosters_A/B = (array) $roosters['weight'];

)

-

[1]得到“无对”(=唯一)

http://www.php.net/manual/en/function.array-diff.php

$no_pairs_array = array_diff($roosters_A, $roosters_B);

-

[2]得到“成对”

http://www.php.net/manual/en/function.array-intersect.php

$pairs_array = array_intersect($roosters_A, $roosters_B);
于 2013-09-30T10:44:26.730 回答