如何计算数组的值?

时间:2015-10-08 06:55:49

标签: php arrays

我想得到php中数组中所有值的总和。这里我有数组

$_SESSION['price'][];

我在数组中有一些值,每次迭代都插入到数组中。 什么时候我得到var_dump($_SESSION['price']);数组

array(1) { [0]=> string(4) "4806" } array(1) { [0]=> string(5) "65000" } array(1) { [0]=> string(5) "44005" } array(1) { [0]=> string(6) "215668" } array(1) { [0]=> string(4) "7896" }

现在我要计算每个值,例如4806 + 65000 + 44005 + 215668 + 7896

我该怎么做?

我尝试了echo "totalsum".array_sum($_SESSION['cart_total']);

但我得到了输出

totalsum4806totalsum65000totalsum44005totalsum215668totalsum7896

5 个答案:

答案 0 :(得分:3)

您可以像{/ p>一样使用array_sum

echo array_sum(call_user_func_array('array_merge', $arr));

或者对于PHP> 5.5.0 您也可以像{/ p>一样使用array_column

echo array_sum(array_column($arr,0));

<强>输出:

337375

Demo

答案 1 :(得分:1)

显然你有一个二维数组。 $_SESSION['price']的每个元素都是一个包含一个元素的数组,而不是一个价格。我不确定你为什么这样做,但是你需要写一个循环来访问它们。

$sum = 0;
foreach ($_SESSION['price'] AS $subarray) {
    $sum += $subarray[0];
}

也许您应该修复创建会话变量的任何内容,以使其成为一维数组。子阵列似乎没有任何用途。

答案 2 :(得分:0)

我认为您使用$_SESSION['cart_total'],但您必须使用$_SESSION['price']。代码如下所示

$a = array("price" => array("4806", "65000", "44005", "215668", "7896"));
var_dump($a["price"]);
echo "<br>";
echo "totalsum = " . array_sum($a["price"]);

输出如下所示

array(5) { [0]=> string(4) "4806" [1]=> string(5) "65000" [2]=> string(5) "44005" [3]=> string(6) "215668" [4]=> string(4) "7896" }
totalsum = 337375 

OR

$a["price"][] = array("4806");
$a["price"][] = array("65000");
$a["price"][] = array("44005");
$a["price"][] = array("215668");
$a["price"][] = array("7896");
$sum = 0;
foreach ($a["price"] AS $price) {
    $total += $price[0];
}
echo $total;

答案 3 :(得分:0)

试试这个:我操纵了你的数组

$arr = $_SESSION['price'];

foreach($arr as $key => $val)
{
  $newVal[] = $val[0];
}
print_r(array_sum($newVal)); //output is 337375

答案 4 :(得分:0)

通常,你会对这样的数组求和:

$sum = array_sum($_SESSION['price']);

然而,由于两个原因,这对你不起作用:

  1. 您的值不是以整数形式存储,而是以字符串形式存储(因此var转储中为")。 (好的,array_sum可能会将它转换为整数,所以在实践中这可能不是问题。)
  2. 您的值不是作为元素存储在数组中,而是出于某种原因作为子数组中的单个元素(因此var转储中的array(1) { [0]=>)。
  3. 如果你没有理由想要这样做,那么最简单的解决方案就是在创建数组时修复这两件事,所以不是嵌套的字符串数组,而是有一个平面数组整数。

    如果出于某种原因无法做到这一点,你可以这样总结:

    $sum = 0;
    foreach($_SESSION['price'] as $e) {
        // Convert the first element of the sub array to integer and add it to the $sum.
        $sum += (int)$e[0];
    }