2

I have this array:

$a = array(1, 2, 3, 4, 5, 7, 8, 10, 12);

Is there a function to convert this to:

$b = array(1, 1, 1, 1, 2, 1, 2, 2);

So basicaly:

$b = array ($a[1]-$a[0], $a[2]-$a[1], $a[3]-$a[2], ... ,$a[n]-$a[n-1]);

Here is the code I have so far:

$a = $c = array(1, 2, 3, 4, 5, 7, 8, 10, 12);
array_shift($c);
$d = array();
foreach ($a as $key => $value){
   $d[$key] = $c[$key]-$value;
}
array_pop($d);
4

2 に答える 2

2

これを実行できる組み込み関数はありませんが、代わりにコードを組み込むことができます。また、2 番目の配列 を作成するのではなく$c、通常のforループを使用して値をループすることもできます。

function cumulate($array = array()) {
    // re-index the array for guaranteed-success with the for-loop
    $array = array_values($array);

    $cumulated = array();
    $count = count($array);
    if ($count == 1) {
        // there is only a single element in the array; no need to loop through it
        return $array;
    } else {
        // iterate through each element (starting with the second) and subtract
        // the prior-element's value from the current
        for ($i = 1; $i < $count; $i++) {
            $cumulated[] = $array[$i] - $array[$i - 1];
        }
    }
    return $cumulated;
}
于 2012-10-03T19:19:28.557 に答える
1

php には、このための機能が組み込まれていないと思います。これを解決するには多くの方法がありますが、あなたはすでに答えを書いています:

$len = count($a);
$b = array();
for ($i = 0; $i < $len - 1; $i++) {
  $b[] = $a[$i+1] - $a[$i];
}
于 2012-10-03T19:21:55.493 に答える