数组求和和“未定义索引”

时间:2016-02-09 09:45:11

标签: php

我想在我的数组中求和:

<?php
if(isset($values[$key])) {
    $values[$key] += $total;
} else {
    $values[$key] = $total;
}

如果我只写“+ =”,我会收到错误“未定义索引”。 你知道一种更简单的方法吗?因为长代码太长了。感谢

7 个答案:

答案 0 :(得分:3)

你可以稍微缩短一下

<?php
if(!isset($values[$key]))
  $values[$key]= 0;
$values[$key] += $total;

但是你编写代码的方式已经非常简洁,更重要的是,它非常简洁。

编辑:首先发生错误,因为写作时 $values[$key] += $total;,在内部与$values[$key] = $values[$key] + $total相同 - 并且当$ value [$ key]未首先启动时,无法读取。

PHP通常假定它为0然后抛出未定义的&#34;键&#34; -note以通知程序员他忘了启动数组元素。

答案 1 :(得分:1)

我认为你可以简单地使用array_sum($ arrayname)函数。

如果你想对数组的键求和做这样的事情

array_sum(array_keys($array_name));

答案 2 :(得分:1)

您可以在一行中完成所有工作:

$values[$key] = array_key_exists($key, $values) ? $values[$key] + $total : $total;

以下是参考资料:

答案 3 :(得分:1)

应该是$total第一个

<?php 

$total = 0;

if(isset($values[$key])) {
   $total += $values[$key]; //Also equal to $total = $total + $values[$key];
} else {
    $total = $values[$key];
}

答案 4 :(得分:0)

试试这个:

<?php
$values[$key] = @$values[$key] + $total;

答案 5 :(得分:0)

使用较少行的另一种方法是使用ternary operator

<?php
$values[$key] = isset($values[$key]) ? ($values[$key] + $total) : $total;

答案 6 :(得分:0)

我不完全确定你要做什么,看到你传入这个阵列会很好。无论哪种方式,都会产生undefined index错误,因为您尝试在不存在时访问数组键$key

从我可以解决的问题来看,如果设置了该键,您只想将总数添加到数组中的键上?如果未设置密钥,则需要创建该密钥并将其值设置为当前总计。至少那是我对你想要的理解。

所以你所做的几乎是正确的,除非你试图访问条件失败时尚未设置的索引。

if (!isset($array[$key])) {
    $array[$key] = $total;
} else {
    $array[$key] += $total;
}

上面应该修复你的错误,可能有一些更干净的解决方案,但不知道有关数组内容和脚本目的的更多信息,很难说最好的方法是什么。