-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

コードが進むにつれて合計したいすべての値をすでに知っているようです。それらを直接配列に追加してみませんか?

<?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 に答える
0

$items関数内と関数$items外は 2 つの異なるスコープにあり、完全に異なる変数です。関数の$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 に答える