Php-将数组中的数字逐个相加

Php-将数组中的数字逐个相加,php,Php,我有一个数组 $arr=array(1100,3150,4430,4430,5170,7450,7450,7450,8230); 我想用图表显示它们。我希望Y轴作为该数组的元素,X轴作为该元素之前的数字总和。(x1,x1+x2,x1+x2+x3,…) 我的图表将是 Y-Axis : 1100,3150,4430,4430,5170,7450,7450,7450,8230 X-Axis : 1100,4250,8680,13110,18280,25730,33180,40630,48860 但

我有一个数组

$arr=array(1100,3150,4430,4430,5170,7450,7450,7450,8230);
我想用图表显示它们。我希望Y轴作为该数组的元素,X轴作为该元素之前的数字总和。(x1,x1+x2,x1+x2+x3,…)

我的图表将是

Y-Axis : 1100,3150,4430,4430,5170,7450,7450,7450,8230
X-Axis : 1100,4250,8680,13110,18280,25730,33180,40630,48860
但我不知道该怎么做。有人能帮我吗?谢谢

我的全部代码:

<?php
echo " ".'<br>'.'<br>'; 
    $arr=array(1100,3150,4430,4430,5170,7450,7450,7450,8230);
$arrtotal=0;


for($i=0; $i<=8; $i++)
{
    if ($arr[$i]<100) {
    $arr[$i]=$arr[$i];
 }
    else
    {
        $arr[$i]=$arr[$i]/1000;
        $arr[$i]=(string)$arr[$i];
    }
}

function calculate($arr, $output){

        switch($output){
            case 'mean':
                $count = count($arr)+1;
                $sum = array_sum($arr);
                $total = $sum / $count;
            break;
            case 'median':
                rsort($arr);
                $middle = (count($arr) / 2)+1;
                $total = $arr[$middle-1];
            break;
            case 'mode':
                $v = array_count_values($arr); 
                arsort($v); 
                foreach($v as $k => $v){$total = $k; break;}

            break;

        }
        return $total;
    }

function sd_square($x, $total) { return pow($x - $total,2); }
function sd($arr) {
    return sqrt(array_sum(array_map("sd_square", $arr, array_fill(0,count($arr), (array_sum($arr) / count($arr)) ) ) ) / (count($arr)-1) );
}

echo '  '.'<br>';
echo "Values: ";
echo json_encode($arr).'<br>';
echo 'Mean: '.calculate($arr, 'mean').'<br>';
echo 'Median: '.calculate($arr, 'median').'<br>';
echo 'Mode: '.calculate($arr, 'mode').'<br>';
echo "Standart Derivation: ".sd($arr);
?>


<!DOCTYPE HTML>
<html>
<head>
<script>
window.onload = function () {

var data = <?php echo json_encode($arr, JSON_NUMERIC_CHECK); ?>;
data = data.map(function (row, index) {
    return {
        x: index,
        y: row
    };
});

var chart = new CanvasJS.Chart("chartContainer", {
    title: {
        text: "Analysis"
    },
    axisY: {
        title: "Variables"
    },
    data: [{
        type: "line",
        dataPoints: data
    }]
});
chart.render();

}

</script>
</head>
<body>

<div id="chartContainer" style="height: 250px; width: 50%;"></div>
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
</body>
</html>

window.onload=函数(){
var数据=;
data=data.map(函数(行、索引){
返回{
x:索引,
y:行
};
});
var chart=new CanvasJS.chart(“chartContainer”{
标题:{
正文:“分析”
},
axisY:{
标题:“变量”
},
数据:[{
键入:“行”,
数据点:数据
}]
});
chart.render();
}
在这段代码中,我的X轴是(0,1,2,3,4,5,6,7,8),我不希望这样


如果我不能很好地解释,我很抱歉,英语不是我的母语。

最简单的方法就是在值上循环,将当前数组值添加到以前的输出值中以创建新的输出值。然后,您可以使用以下方法将其转换为[x=>y]值的数组:


最简单的方法就是在值上循环,将当前数组值添加到以前的输出值中,以创建新的输出值。然后,您可以使用以下方法将其转换为[x=>y]值的数组:


要将一个数组转换为两个图形坐标数组,可以执行以下操作:

$x = array();
$y = array();
$running_total = 0;
for($i = 0; $i < count($arr); $i++){
    $y[$i] = $arr[$i];
    $running_total += $arr[$i];
    $x[$i] = $running_total;
}
$x=array();
$y=数组();
$running_总计=0;
对于($i=0;$i
这将为您提供两个数组;数组$x包含x坐标列表,数组$y提供y坐标列表;如果需要进一步计算,您仍然可以访问原始的$arr数组。基于你的问题,我认为这会满足你的需要

但是,如果您说需要1个数组,其中X坐标是数组索引,而该值是数组值本身,例如$y[3150]=4250,那么这是不可能的;由于原始列表中有重复项,因此无法将这些值用作数组索引,而最终会覆盖它们


(至少,不是不将每个数组值设置为数组本身,而是在可能需要的位置上设置一个数量级)

要将一个数组设置为两个图形坐标数组,可以执行以下操作:

$x = array();
$y = array();
$running_total = 0;
for($i = 0; $i < count($arr); $i++){
    $y[$i] = $arr[$i];
    $running_total += $arr[$i];
    $x[$i] = $running_total;
}
$x=array();
$y=数组();
$running_总计=0;
对于($i=0;$i
这将为您提供两个数组;数组$x包含x坐标列表,数组$y提供y坐标列表;如果需要进一步计算,您仍然可以访问原始的$arr数组。基于你的问题,我认为这会满足你的需要

但是,如果您说需要1个数组,其中X坐标是数组索引,而该值是数组值本身,例如$y[3150]=4250,那么这是不可能的;由于原始列表中有重复项,因此无法将这些值用作数组索引,而最终会覆盖它们


(至少,不是不让每个数组值本身成为一个数组,而是在可能需要的地方增加一个数量级)

ohh我在做$arr[$I]+$arr[$I-1]。。。那是我的错误。谢谢尼克,但我还有一个问题。现在我有两个数组,我可以在同一个图中显示它们吗?($arr是y轴,$out是x轴)@tanayan根据您的代码判断,您可能只需要
$arr=array\u combine($out,$arr)。这将给你一个数组,看起来像
[1100=>1100,4250=>31508680=>4430…]
我做了数组组合,但我的数组变成了{“1100”:1100,“3150”:4250,“4430”:13110,“5170”:18280,“7450”:40630,“8230”:48860}它跳过了重复的数字,但我需要它们,我能做什么呢?@tanaycan看起来你做了
数组组合($arr,$out)
而不是
array\u combine($out,$arr)
ohh我在做$arr[$I]+$arr[$I-1]。。。那是我的错误。谢谢尼克,但我还有一个问题。现在我有两个数组,我可以在同一个图中显示它们吗?($arr是y轴,$out是x轴)@tanayan根据您的代码判断,您可能只需要
$arr=array\u combine($out,$arr)。这将给你一个数组,看起来像
[1100=>1100,4250=>31508680=>4430…]
我做了数组组合,但我的数组变成了{“1100”:1100,“3150”:4250,“4430”:13110,“5170”:18280,“7450”:40630,“8230”:48860}它跳过了重复的数字,但我需要它们,我能做什么呢?@tanaycan看起来你做了
数组组合($arr,$out)
不用
array\u combine($out,$arr)
谢谢你,主人,你的回答对我很有用。我还有一个问题。如何在同一图表中显示这些$x和$y?我不能随便做,我不能回答。我不熟悉您使用的
CanvasJS
软件包:(我理解,没问题,您帮了很多忙。谢谢:)谢谢您,老师,您的回答对我真的很有用。我还有一个问题。如何在同一图表中显示这些$x和$y?我不能随便做,我不能回答。我不熟悉您正在使用的
CanvasJS
软件包:(我理解,没问题,您帮了很多忙。谢谢:)
$x = array();
$y = array();
$running_total = 0;
for($i = 0; $i < count($arr); $i++){
    $y[$i] = $arr[$i];
    $running_total += $arr[$i];
    $x[$i] = $running_total;
}