2013-09-30 40 views
-1

我如何找到兩個數字之間的匹配。如果公雞的重量等於公雞_B的重量。如果匹配,兩對將不會再次匹配,我有一個未設置的功能。使用while循環在多維數組上尋找一對php

這裏是我的代碼:

$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 

你能幫助我嗎?我很難找到一種方法來匹配它,而不用重複,也沒有使用任何數據庫來顯示這條記錄。非常感謝那些會幫助我的人。我認爲這對你們很容易。提前致謝。

回答

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保持獨特weights$rooster中有多少個weights。最後輸出結果,通知每個weight是否有一個或多個。

+0

感謝您的幫助@davidkonrad。三雙怎麼樣?配對2000 2000 2000的示例如何刪除多餘的2000? – Shudmeyer

+0

@Edmar,你可以看到(或試用)該算法,不準確地尋找兩對,或者僅回顯兩對。已經更新了答案 - 我已經改變了「無配對」,「配對」,「三元」到「開關」,包括「三對」和「多對」。根據需要展開/修改'switch'。幷包括一個休息,所以它不會重複說2000多兩次。 – davidkonrad

+0

hi @davidkonrad。謝謝你這個偉大的答案,你是一個天才。對於太多的問題抱歉。另一件事,我如何跟蹤比賽是否已經配對?例如三對2000,2000和2000已經配對,另外2000對沒有配對可以嗎?謝謝你的幫助。 – Shudmeyer

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);