-2

我正在尝试获取传递给函数的所有数字的总和,但遇到了一些问题。

我想在回显数组总和时显示结果 17,array('1','4','9','3');

result_time(1);
result_time(4);
result_time(9);
result_time(3);

$items = array(); 

function result_time($Num){

    $items[] = $Num;        
}

echo array_sum($items);

谁能解释我在这里做错了什么?

4

3 回答 3

2

这不是最好的方法,但您可以尝试添加global $items;到您的result_time函数中。

function result_time($Num)
{
    global $items;
    $items[] = $Num;        
}

您可以在此处阅读有关变量范围的更多信息:http: //php.net/manual/en/language.variables.scope.php

于 2012-12-12T10:41:40.067 回答
0

$items函数内部和函数$items外部在两个不同的范围内,它们是完全不同的变量。每次调用时,函数内部$items都会重置为空,并且也不影响$items函数外部。本质上,您的函数什么都不做。真正正确的是,您应该使用一个类来执行此操作:

class Result {

    protected $items = array();

    public function add($num) {
        $this->items[] = $num;
    }

    public function getResult() {
        return array_sum($this->items);
    }

}

$r = new Result;
$r->add(1);
...
echo $r->getResult();

您还可以使用static变量使函数内的值累积:

function result_time($Num){
    static $items = array();
    $items[] = $Num;
    return $items;
}

result_time(1);
...
$result = result_time(3);

echo array_sum($result);

不过,这并不是一个好主意。您也可以使用global关键字共享变量的范围,但这是一个坏主意,我不会宣传它。了解变量范围并正确构建代码。

于 2012-12-12T10:44:48.897 回答
0

随着代码的进展,您似乎已经知道要求和的所有值。为什么不直接将它们添加到数组中?

<?php    
$result_times = array();
array_push($result_times, 1);
// some code
array_push($result_times, 4);
// other code
array_push($result_times, 9);

echo array_sum($result_times);
于 2012-12-12T10:50:14.537 回答