2016-07-26 84 views
2

考慮的陣列(2,3,4,5)找到從陣列中的所有因子對在PHP

我需要使可能的組合等

(2,60),(6,20),(24,5),(10,12),(30,4) (8,15) =因子對120個

一個解決方案正在使用for loop。一個運行從0currentPos和其他從currentPosN(其中N是在這種情況下的因素陣列的數量,即4)

for($i=$pos;$i>=0;$i--) 
{ 
    $p1 = $p1 * $factorArr[$i]; 
} 
for($j=$pos;$j<=$N;$j++) 
{ 
    $p2 = $p2 * $factorArr[$j]; 
} 

這裏爲$ pos是增加

任何人誰知道更好的方法在PHP中執行此操作?

+2

初始數組的相關性是什麼?它有什麼關係? – showdev

+0

如果你只是想檢查數組中的值對:[https://eval.in/612448](https://eval.in/612448) – FirstOne

+0

我只是不明白你爲什麼'10 ,12'和'6,20' ..也許你想自己也可以自己繁殖嗎? (如果是這樣,爲什麼不'8,15'?) – FirstOne

回答

1

下面的代碼將得到所有組合,而無需重複:

$factor = 5; 
$arr = range(1, $factor); // (1,2,3,4,5) 
$f = array_product($arr); 
$pairs = array(); 
$unique = array(); 
for($i = 1; $i < $f/2; $i++){ // only need to check until half (the other half would repeat the values 
    // if not divisable/already found 
    if($f % $i != 0 || isset($unique[$i]) || isset($unique[$f/$i])){ 
     continue; 
    } 
    $pairs[] = array($i, $f/$i); 
    $unique[$i] = true; 
} 

結果($pairs):

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 120 
     ) 

    [1] => Array 
     (
      [0] => 2 
      [1] => 60 
     ) 

    [2] => Array 
     (
      [0] => 3 
      [1] => 40 
     ) 

    [3] => Array 
     (
      [0] => 4 
      [1] => 30 
     ) 

    [4] => Array 
     (
      [0] => 5 
      [1] => 24 
     ) 

    [5] => Array 
     (
      [0] => 6 
      [1] => 20 
     ) 

    [6] => Array 
     (
      [0] => 8 
      [1] => 15 
     ) 

    [7] => Array 
     (
      [0] => 10 
      [1] => 12 
     ) 

) 

看到它在行動here


如果你需要像這個問題,你可以使用此代碼:

$p = array(); 
foreach($pairs as $pair){ 
    $p[] = sprintf('(%s,%s)', $pair[0], $pair[1]); 
} 

結果($p):

Array 
(
    [0] => (1,120) 
    [1] => (2,60) 
    [2] => (3,40) 
    [3] => (4,30) 
    [4] => (5,24) 
    [5] => (6,20) 
    [6] => (8,15) 
    [7] => (10,12) 
) 

旁註:你可以做到這一點第一個代碼 - 不需要爲此創建另一個循環(在$pairs[] = array($i, $f/$i);之後,可以使用$p[] = sprintf('(%s,%s)', $i, $f/$i);

+0

有趣!非常感謝你的幫助。 :) – user269867

+0

不客氣;)@ user269867 – FirstOne

0

您只需要一個循環。如果你已經擁有了所有的因素,那麼你所需要的只是數組中的foreach循環。以下是一個輸出對的例子,但您可以將除法操作的值分配給另一個變量或另一個數組等。如果您需要發現這些因素,它只是稍有不同,但是是一個不同的問題。

$number = 120; 
$factors = [1,2,3,4,5,8,10]; 

foreach($factors as $factor){ 
    echo "($factor," . $number/$factor . ")\n</br>"; 
} 
+0

如果沒有錯,1,2,3,4,5是主要因素。所以我不會在這個數組中有8和10 – user269867

+0

這很好 - 這只是一個例子。如果我理解正確,你已經有了這些因素,那麼只需將你想要的那些放入數組中,並留下那些你不想要的數據。 – Chi