将数值放入数组并使用array_sum函数

3

嗨,我有点困惑,知道我错过了一些简单的东西,希望可以得到新鲜视角的帮助。

一个列中存储了类似于2:7:99之类的值,每个值都用冒号分隔开来。

现在,我可以将所有这些值分离出来,并查询另一个表以获取与该值相对应的价格。

我的问题是如何对所有价格值进行求和。 请参见以下代码。 我认为最简单的方法是将所有价格值添加到数组中,然后执行array_sum()函数,但是由于某种原因,我无法使其正常运行。

** 请不要提到SQL注入..它只是在本地机器上,没有外部访问,只有我自己会使用这个。

    <?php
include('config.php');
// Function for calculation Rough Invoice Total
function basicTotal() {
    $con = mysqli_connect("localhost","USER","PASS","TABLE");
    $wtbdq = mysqli_query($con,"SELECT * FROM `jobs` WHERE wsjid = '18'");
    $wtbdr = mysqli_fetch_assoc($wtbdq);
    do {
    $wtbd = explode(":",$wtbdr['worktobedone']);
    foreach($wtbd as $item) 
        {
            $priceq = mysqli_query($con,"SELECT * FROM `workshop-items` WHERE wsiid = '$item'");
            $pricer = mysqli_fetch_assoc($priceq);

            $price = array($pricer['incvat']);

            echo $item.' - '. $pricer['incvat'].'<br>';

        }

    } while($wtbdr = mysqli_fetch_assoc($wtbdq));

    $total = array_sum($price);
    echo $total;
}
basicTotal();
?>

提前感谢您。


$total = 0; foreach(...) {... $total += $pricer['incvat']; ...} 怎么样? - Ruslan Osmanov
为什么不使用SELECT *,SUM(incvat) AS total FROM workshop-items WHERE wsiid = '$item'? - Gerard
3个回答

4
just replace  $price = $pricer['incvat']; 

with this in your code

$price[] = $pricer['incvat'];

2
你一直在覆盖你的最终价格:
$price = array($pricer['incvat']);

请将其替换为:

$price[] = $pricer['incvat'];

有没有想法为什么它会将所有记录的值相加,而不仅仅是当前行? - Chris Yates
它应该只添加来自SELECT * FROM jobs WHERE wsjid = '18'的那些。调试一下这个查询,看看它是否没有返回你用来获取价格的所有ID。但你可以更详细地解释一下现在到底发生了什么。我认为你应该开一个新的问题。 - matiaslauriti
1
嗨,我提出了一个新的问题,展示了所有代码。http://stackoverflow.com/questions/44028136/array-sum-counting-all-records-in-result-query-not-each-row-individually - Chris Yates

2

您当前的方法存在问题,即您正在覆盖$price变量。您需要像这样将值推入$price数组中:$price[] = $pricer['incvat']。您需要这样做。

    <?php
include('config.php');
// Function for calculation Rough Invoice Total
function basicTotal() {
    $con = mysqli_connect("localhost","USER","PASS","TABLE");
    $wtbdq = mysqli_query($con,"SELECT * FROM `jobs` WHERE wsjid = '18'");
    $wtbdr = mysqli_fetch_assoc($wtbdq);
    do {
    $wtbd = explode(":",$wtbdr['worktobedone']);
    foreach($wtbd as $item) 
        {
            $priceq = mysqli_query($con,"SELECT * FROM `workshop-items` WHERE wsiid = '$item'");
            $pricer = mysqli_fetch_assoc($priceq);

            $price[] = $pricer['incvat'];

            echo $item.' - '. $pricer['incvat'].'<br>';

        }

    } while($wtbdr = mysqli_fetch_assoc($wtbdq));

    $total = array_sum($price);
    echo $total;
}
basicTotal();
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接