2017-01-06 15 views
0

У меня есть две переменные один с именем $corp_res р:Умножение и добавить 2 массивы

var_dump($corp_resp) 

строка (3) "0.3" строка (4) "0,35" строка (3) "0,4"

Другое: $corp_resp_template

var_dump($corp_res_template)´ 

строка (3) «0 0,4" строка (3) „0,6“ строка (3) „0,8“

Я хочу добавить и умножить массивы:

$total = (0.3*0.4)+(0.35*0.6) +(0.4*0.8) => 0,12+0.21+0,32 

$total = 0.65 

Что такое лучший способ сделать это?

+1

вы можете показать нам, что вы пробовали до сих пор? – aniri

+0

$ sum = 0; for ($ i == 0; $ i

+0

@ ChristopheCosta это псевдо-код, который я показал вам [в чате] (http://chat.stackoverflow.com/transcript/11?m=34965771#34965771). Оглянитесь вокруг некоторого базового синтаксиса for-loop, чтобы увидеть, как это сделать, вместо того, чтобы просить других написать код для вас. И, BTW, единственное, чего не хватает в этом коде, это '$ i ++' часть после функции count() (извините, я думал, что достаточно очевидно, чтобы пропустить ее). –

ответ

2

если оба ваши массивы имеют одинаковую длину, вы можете запустить что-то вроде:

array_sum(array_map(
    function($resp, $tpl){ return $resp * $tpl; }, 
$corp_resp, $corp_res_template)); 

Если массивы имеют разную длину, хвост более массива будет оцениваться на (число * 0), поэтому игнорирование их при добавлении до конечного результата

+0

Этот подход предполагает правильное преобразование значений строкового массива в float для множественности. –

1

Напишите функцию, чтобы сделать это

$corp_resp = array("0.3", "0.35", "0.4"); 
$corp_res_template = array("0.4", "0.6", "0.8"); 

function add_products($a1, $a2) { 
    if (!is_array($a1)) { 
      throw new Exception("a1 is not an array"); 
    } 
    if (!is_array($a2)) { 
      throw new Exception("a2 is not an array"); 
    } 
    if (sizeof($a1) != sizeof($a2)) { 
      throw new Exception("Arrays don't have same number of elements"); 
    } 

    // both params are arrays and have same number of elements! 

    $count = sizeof($a1); 
    $multiplied = array(); 
    for($i=0; $i<$count; $i++) { 
      // we assume that each element is a string representing a floatval so we need to cast as a float before multiplying 
      $multiplied[$i] = floatval($a1[$i]) * floatval($a2[$i]); 
    } 
    return array_sum($multiplied); 
} 

$val = add_products($corp_resp, $corp_res_template); 

var_dump($val); 
+0

Здравствуйте, я попробую отправить оба кода и попробовать некоторые изменения, но не работает. –

+0

@ ChristopheCosta «Не работает» как? Пожалуйста, будьте более конкретными. –

+0

Здравствуйте, проблема была в массивах и используется функция array_reduce. Сейчас работает. Спасибо за вашу любезную помощь. –