根据另一个数字数组计算新的数组值

时间:2013-11-25 07:29:23

标签: javascript php

我有一个数组(从数据库填充)$dna_segment_length,在这种情况下:

{50, 75, 20, 90}

每个值代表一个行长度。这些线条在画布上绘制,如:

enter image description here

为了使线段连接成一条连续的水平线,我需要创建另一个数组,比如$start_points,它代表每条线的起点。在上面的示例中,此数组类似于以下内容,并为第一行设置了起始点:

{100, 150, 225, 245}

起点数组中的第一个值总是需要为100.通过在新数组中添加行长度和前一个值来创建连续值。问题是我应该如何使用循环?

3 个答案:

答案 0 :(得分:1)

我认为这是一个

完美的机会

使用array_map

<?php

$seg = array(50, 75, 20, 90);
$start = 100; // offset

$pts = array_map(function($n) use (&$start) {
    $val = $start;
    $start += $n;
    return $val;
},$seg);

print_r($pts);

?>

print_r提供了

所需的输出 -

百偏移:

Array
(
    [0] => 100
    [1] => 150
    [2] => 225
    [3] => 245
)

这是诗歌

为某人的眼睛编码艺术

使用array_map

答案 1 :(得分:0)

我认为单个多维数组应该比以后尝试引用2个数组更容易。这也允许您从一个数组中引用长度数组中最后一项的长度:)

// $dna_segment_length = {50, 75, 20, 90}
$starting_int = 100; // the starting value for the line distance
$prev_val = 0; // initialised and set to 0 so we dont effect $starting_int
$segment_array = array(); // will be our reference multi dimension array
for($x = 0; $x < count($dna_segment_length); $x++){
    $segment = array(); // local array
    $segment["start"] = $starting_int + $prev_val;
    $segment["length"] = $dna_segment_length[$x];
    array_push($segment_array, $segment);
    //set values for next iteration
    $starting_int .=  $prev_val;
    $prev_val = $dna_segment_length[$x];
}

// output array
/* {
    [0]=> array(
        ["start"] => 100,
        ["length"] => 50
    ),
    [1]=> array(
        ["start"] => 150,
        ["length"] => 75
    ),
    [2]=> array(
        ["start"] => 225,
        ["length"] => 20
    ),
    [3]=> array(
        ["start"] => 245,
        ["length"] => 90
    ),
    }
*/

答案 2 :(得分:0)

//The first value in the starting points array always needs to be 100
$firstValue = 100;

$start_points = array();
$currentValue = $firstValue;
$dnaSegmentLengthCount = count($dna_segment_length);

//using a loop
for ($i = 0; $i < $dnaSegmentLengthCount; ++$i) {
    $start_points[$i] = $currentValue;

    //created by adding the line length and the previous value in the new array
    $currentValue += $dna_segment_length[$i];
}
相关问题