У меня есть массив (заполненный из базы данных) $dna_segment_length
, в этом случае:
{50, 75, 20, 90}
Каждое значение представляет длину строки. Линии рисуются на холсте наподобие:
Чтобы линейные сегменты включались в непрерывную горизонтальную линию, мне нужно создать другой массив, например $start_points
, который представляет начальные точки для каждой строки. В приведенном выше примере этот массив будет выглядеть следующим образом с заданной начальной точкой для первой строки:
{100, 150, 225, 245}
Первое значение в массиве начальных точек всегда должно быть 100. Последовательные значения создаются путем добавления длины строки и предыдущего значения в новом массиве. Вопрос в том, как мне это сделать, используя цикл?
//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]; }
Я думаю, это
прекрасная возможность
для использования 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
.
Я решил, что один массив с несколькими измерениями должен быть проще, чем пытаться ссылаться на 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 ), } */