2013-11-25 3 views
-1

У меня есть массив (заполняется из базы данных) $dna_segment_length, в данном случае:Вычисление новых значений массива на основе другого числового массива

{50, 75, 20, 90} 

Каждое значение представляет собой длину строки. Линии втягиваются на холсте, как:

enter image description here

Чтобы сделать линию сегментов присоединиться к непрерывной горизонтальной линии, мне нужно создать еще один массив, скажем $start_points, которые представляют собой отправные точки для каждой линии. В приведенном выше примере, этот массив будет иметь следующий набор с начальной точки для первой линии:

{100, 150, 225, 245} 

Первое значение в массиве исходных точек всегда должно быть 100. Последовательные значения создаются путем добавления длина строки и предыдущее значение в новом массиве. Вопрос в том, как мне это сделать, используя цикл?

+0

Не последнее значение отсутствует в массиве $ start_point? Вы пробовали петлю? Что такое динамические средства? – Bytemain

+0

4 линии = 4 стартовых точки. Для заполнения массива начальных точек потребуется цикл, но я не уверен, как построить цикл для создания нового массива и начальных точек. Динамический означает, что алгоритм должен быть гибким, чтобы работать с разными значениями в базе данных ... который, конечно, будет обрабатывать цикл – IlludiumPu36

+0

Почему этот вопрос был проголосован? – IlludiumPu36

ответ

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]; 
} 
+1

гораздо проще, чем у меня, если OP ищет только один размерный массив :) – haxxxton

+0

Да, это именно то, что я искал. – IlludiumPu36

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 
    ), 
    } 
*/ 
+0

Мне понравилась ваша идея о многомерном массиве, но на самом деле это стало чем-то более простым. Большое спасибо с вашей помощью! Все еще не понимаю, почему мой вопрос был занижен в первую очередь ... – IlludiumPu36

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.

+0

oo .. это гораздо лучший ответ, если мы собираемся для простоты :) – haxxxton

+1

моя медленнее! 0,36 с avg (denkiryokuhatsuden) против 1.10s avg (zamnuts) 5 x 100000 итераций. крик ... но я все еще думаю, что это читается лучше! – zamnuts

+0

, и я думаю, что «технически» он указал, что хочет использовать цикл. Не уверен, что это действительно была необходимость или просто поворот фразы, хотя :) – haxxxton

Смежные вопросы