【PHP/演習問題】function use[2]
問題
一定値以上の複数数値の一覧と合計値を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。
- 複数数値は標準入力で与える(空文字が入力されるまで)
- 一定値は標準入力で与える
- 複数数値の一覧を出力する処理を行う無名関数を作成する
※ 一定値はuseキーワードで与える - 複数数値の合計値を戻り値として返す処理を行う無名関数を作成する
※ 一定値はuseキーワードで与える - execute関数を下記の次の仕様で作成する
引数: 複数数値、クロージャー
処理: クロージャーを呼び出し、引数に複数数値を与える
$ php practice.php
=== Input Number ===
> 123
> 456
> 789
>
=== Input Min Number ===
> 400
=== Closure ===
456
789
total : 1245
$ php practice.php
=== Input Number ===
> 1234
> 3456
> 5678
> 7890
>
=== Input Min Number ===
> 3000
=== Closure ===
3456
5678
7890
total : 17024
解答例
<?php
echo "=== Input Number ===\n";
$values = [];
while( true ) {
echo '> ';
$value = trim(fgets(STDIN));
if( $value == '' ) {
break;
}
$values[] = $value;
}
echo "=== Input Min Number ===\n";
echo '> ';
$min = trim(fgets(STDIN));
$detail_closure = function( $values ) use ( $min ) {
foreach( $values as $value ) {
if( $min <= $value ) echo $value."\n";
}
};
$sum_closure = function( $values ) use ( $min ) {
$total = 0;
foreach( $values as $value ) {
if( $min <= $value ) $total += $value;
}
return $total;
};
function execute( $values, $closure ) {
return $closure($values);
}
echo "=== Closure ===\n";
execute($values, $detail_closure);
$total = execute($values, $sum_closure);
echo 'total : '.$total."\n";
?>