2015-12-07 159 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