我有一个数组(从数据库填充)$dna_segment_length
,在这种情况下:
{50, 75, 20, 90}
每个值代表一个行长度。这些线条在画布上绘制,如:
为了使线段连接成一条连续的水平线,我需要创建另一个数组,比如$start_points
,它代表每条线的起点。在上面的示例中,此数组类似于以下内容,并为第一行设置了起始点:
{100, 150, 225, 245}
起点数组中的第一个值总是需要为100.通过在新数组中添加行长度和前一个值来创建连续值。问题是我应该如何使用循环?
答案 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];
}