2015-12-07 103 views
0

我需要爲給定的數組找到一個「最常用的」數組(我甚至不知道這個詞應該是什麼)。我的意思是一個數組,其元素可以按順序組合起來形成相同的元素輸入數組)。輸入數組可能具有不同的count()結果,但它們始終是一維的,始終只包含整數,並始終具有相同的array_sum()結果。在PHP中尋找「最常見」數組?

例子:

$a = array(4,6); 
$b = array(5,5); 
$c = array(5,1,4); 

什麼是找到(在這種情況下)這陣

$gca = array(4,1,1,4); 

的最佳方式?

+0

...........什麼? – rjdown

+0

我不明白 – user2182349

+0

最終數組應該提供可以按順序組合的元素,以便在原始數組中獲得相同的元素。 $ a中的元素可以通過加入如下$ gca元素來生成:(4,1 + 1 + 4)。 $ b中的元素與(4 + 1,1 + 4)中的元素一樣,$ c中的元素與(4 + 1,1,4)中的元素一樣。請讓我知道我如何澄清我的問題。 – Holokinesis

回答

0

將總數中的這些數字轉換後,事情變得更容易,而不是使用間隔/持續時間。這樣一來,原來的排列變成了這些:

$a = array(4,10); 
$b = array(5,10); 
$c = array(5,6,10); 

然後是合併數組,刪除重複值和排序,只是轉換元件回到區間之前的事。建議的功能的輸出是

array(4,1,1,4) 

如預期的那樣。

讚賞功能的任何改進。

$arr[] = array(4,6); 
$arr[] = array(5,5); 
$arr[] = array(5,1,4); 

function findCommonDurations($arr) { 
    $absolute_result = $result = array(); 
    foreach($arr as $key => $value) { 
     $temp_arr = array(); 
     $so_far = 0; 
     foreach($value as $key2 => $value2) { 
      $temp_arr[] = $value2 + $so_far; 
      $so_far += $value2; 
     } 
     $absolute_result = array_merge($absolute_result, $temp_arr); 
    } 
    $absolute_result = array_unique($absolute_result); 
    sort($absolute_result); 

    $result[0] = $absolute_result[0]; 
    for ($i = 1, $n = count($absolute_result); $i < $n; $i++) { 
     $result[] = $absolute_result[$i] - $absolute_result[$i-1]; 
    } 
    return($result); 
} 

print_r(findCommonDurations($arr)); 
+0

結尾的差異計算片段由@Gumbo編寫,在這裏:http://stackoverflow.com/questions/4298472/calculate-the-difference-of-each-values-of-array – Holokinesis