【问题标题】:Finding the "greatest common" array in PHP?在 PHP 中找到“最常见的”数组?
【发布时间】:2015-12-07 02:17:55
【问题描述】:

我需要为 PHP 中的给定数组找到一个“最常见的”数组(我什至不确定该术语应该是什么。我的意思是一个数组,其元素可以按顺序组合以形成相同的元素输入数组)。输入数组可能有不同的 count() 结果,但它们始终是一维的,始终只包含整数并且始终具有相同的 array_sum() 结果。

例子:

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

找到(在这种情况下)这个数组的最佳方法是什么

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

?

【问题讨论】:

  • 我也不懂
  • 最终数组应该提供可以顺序组合的元素,以获得原始数组中的相同元素。 $a 中的元素可以通过像这样连接 $gca 元素来生成:(4,1+1+4)。 $b 中的元素如 (4+1,1+4) 中的元素,$c 中的元素如 (4+1,1,4) 中的元素。请让我知道如何澄清我的问题。

标签: php arrays integer


【解决方案1】:

将这些数字转换为总数后,事情变得容易多了,而不是使用间隔/持续时间。这样,原来的数组就变成了这些:

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

【讨论】:

猜你喜欢
  • 2015-08-18
  • 2013-02-21
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多