【问题标题】:How to sum all rows values in multi-dimensional array with mysqli?如何用mysqli对多维数组中的所有行值求和?
【发布时间】:2019-07-19 23:30:35
【问题描述】:

大家好,我遇到的小问题都在 mysqli 和 php 中

我有一个包含多行的表,我将根据行在这些值的数组总和中提取一列值。

在这里我将像这样放置图像 array[0] + array[0] + array[0] = some value

and array[n] + array[n] +array [n] = some of value 可以打印如何

我的代码是

<?php  
$sql2="SELECT * FROM `purchase_data` where `project_id` ='$proid'";
$result2 = $conn->query($sql2);
$count2=$result2->num_rows;

if ($count2 > 0) {
    $x=1;
    $tot = 0;
    while ($pur_row = $result2->fetch_assoc()) {
        //$proid =$pur_row['pur_id']; 

        $category = $pur_row['pur_category'];
        $categories = explode(',',$category);
        $lenght = count($categories);
        //var_dump($category);


        $est_amou = $pur_row['pur_amount'];
        $est_amount = explode(',',$est_amou);
        var_dump($est_amount);
        //echo $ans_count = array_sum($est_amount);

        //echo $value = array_sum(array_column($est_amount,'pur_amount'));   

        $sum = array();
        foreach ($categories as $key => $sub_array) {
            echo $sub_array;
            foreach ($est_amount as $sub_key => $value) {

                echo $value;
                //If array key doesn't exists then create and initize first before we add a value.
                //Without this we will have an Undefined index error.
                if( ! array_key_exists($sub_key, $sum)) 
                    $sum[$sub_key] = 0;
                //Add Value
                $sum[$sub_key]+=$value;
            }
        }
        print_r($sum);

        for($i=0; $i< $lenght; $i++)
        { 
            $x++;
            $tot = $tot + $est_amount[$i];  
           // $balance = $estimation - $tot;
        } 
    } 
}  
?>

我的数据库是这样的

【问题讨论】:

  • 请探索array_sum()array_map()
  • 您是否考虑过在 SQL 中进行求和?
  • @dearsina:嗯,好主意。
  • 你应该从规范化你的数据库开始,如果你想操作数据,在你的数据库中存储逗号分隔的值是一个坏主意。然后您可以使用SUMGROUP BY 在sql 中进行数学运算。

标签: php arrays mysqli multidimensional-array


【解决方案1】:

给定一个逗号分隔值的数组,这就是您单独计算每个准列之和的方式。

$pur_amount = [
    "6250,2500,26000,12500,9000",
    "6250,2500,26000,12500,9000",
    "6250,2500,26000,12500,9000",
    "6250,2500,26000,12500,9000",
];

$pur_sum = [];
foreach($pur_amount as $string){
    foreach(explode(",", $string) as $id => $val){
        if(!array_key_exists($id, $pur_sum)){
            $pur_sum[$id] = 0;
        }
        $pur_sum[$id] += $val;
    }
}

var_dump($pur_sum);

【讨论】:

  • 你能详细说明这个我没有进入
  • 这不是我的答案,例如:6250+6250+6250+6250 = 25000 和 2500+2500+ 2500+ 2500 =10000 我这样问
  • 那么你得到了什么答案?
  • 我得到的金额是 52000 但我上面提到过类似的金额将显示是否可能? @dearsina
  • 您能否分享您的 sql 的 var_export 并解释您想要达到的数字?我想我对你想要达到的目标有点困惑。
【解决方案2】:

MySQL 查询可能是一个不错的选择,但您可以尝试将其作为 PHP 解决方案。

$arr = [
    [5,5,5,3,1],
    [6,4,2,3,5],
    [4,3,42,6,3]
];


var_dump(array_sum(array_column($arr, 0)));
var_dump(array_sum(array_column($arr, 1)));
var_dump(array_sum(array_column($arr, 2)));
var_dump(array_sum(array_column($arr, 3)));
var_dump(array_sum(array_column($arr, 4)));
int(15) int(12) int(49) int(12) int(9) 

【讨论】:

  • $arr 是什么意思
  • 我的输出数据将显示为 ex:6250+6250+6250+6250 = 25000 和 2500+2500+ 2500+ 2500 =10000 我问这种方式
  • 一个例子; php $arr = [ [3,5,5,3,1], [6,4,2,3,5], [4,3,42,6,3] ];
  • 如果有 n 个项目,那么如何分配 n 个项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多