Я вытаскиваю набор чисел из базы данных MySQL и пытаюсь сделать для них некоторую простую математику, чтобы вычислить общую цену для выставления счета, но PHP не сотрудничает. Я думал, что это может быть проблема с типом принуждения, поэтому я попытался добавить несколько вызовов intval
и floatval
, но все равно общее число всегда выводится в 0.
Вот соответствующий код.
$totalSum = 0;
$parts = $db->select("*", "WHERE record_id=$id", "recordparts");
foreach($parts as &$part) {
$part['priceTotal'] = (floatval($part['price']) * intval($price['quantity'])) + (floatval($part['laborTime']) * floatval($price['laborRate']));
$totalSum += $part['priceTotal'];
}
$record['parts'] = $parts;
$record['partsSum'] = $totalSum;
И вот результаты вышеуказанной операции
parts => Array (1)
0 => Array (8)
id => "18"
partNumber => "92-000001"
record_id => "17"
price => "11.5"
laborTime => "2"
laborRate => "65"
quantity => "1"
priceTotal => 0
partsSum => 0
Ничего себе, посмотрев на это, это была просто опечатка (ну, две). По какой-то причине я случайно переключаюсь с $parts
на использование $price
в качестве массива. Фиксация, которая исправила мою проблему.
foreach($parts as &$part) {
$price = floatval($part['price']);
$quantity = intval($part['quantity']);
$laborTime = floatval($part['laborTime']);
$laborRate = floatval($part['laborRate']);
$part['priceTotal'] = ($price * $quantity) + ($laborTime * $laborRate);
$totalSum += $part['priceTotal'];
}
Из любопытства, почему бы вам просто не позволить MySQL делать умножение? Я предполагаю, что это все равно будет быстрее.
$totalSum = 0;
$parts = $db->select("*, price * quantity AS priceTotal", "WHERE record_id = $id", "recordparts");
foreach($parts as &$part) {
$totalSum += $part['priceTotal'];
}
$record['parts'] = $parts;
$record['partsSum'] = $totalSum;
$price["quantity"]
, но это не должно учитывать результат 0.