У меня есть две переменные с именем $corp_res
п:
var_dump($corp_resp)
строка (3) «0,3» строка (4) «0,35» строка (3) «0,4»
Другой: $corp_resp_template
var_dump($corp_res_template)´
строка (3) «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
Каков наилучший способ сделать это?
если оба ваших массива имеют одинаковую длину, вы можете запустить что-то вроде:
array_sum(array_map(
function($resp, $tpl){ return $resp * $tpl; },
$corp_resp, $corp_res_template));
Если массивы имеют неодинаковую длину, хвост более длинного массива будет оцениваться как (число * 0), поэтому игнорируя их при суммировании окончательного результата
Напишите функцию, чтобы сделать это
$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);