「PHP/入門/関数とは」の版間の差分
削除された内容 追加された内容
→array_*関数の拡張: 結果を説明的に タグ: 2017年版ソースエディター |
→array_*関数の拡張: ln タグ: 2017年版ソースエディター |
||
472 行
また、sum() は、カハンの加算アルゴリズムを使い誤差を最小にするようにしています。
;[https://paiza.io/projects/PxiQBByxsovlo_AvfhwGog?language=php 実装]:<syntaxhighlight lang=php line>
<?php
// phpinfo();
declare(strict_types=1);
function reduce(array $ary, callable $code, mixed $result = null): mixed {
$i = 0;
foreach ($ary as $el) {
if ($i == 0 && !isset($result)) {
$result = $el;
} else {
491 ⟶ 490行目:
}
echo 'reduce([1, 2, 3], fn($s, $x) => $s + $x) --> ', reduce([1, 2, 3], fn($s, $x) => $s + $x), PHP_EOL;
echo 'reduce([1, 2, 3], fn($s, $x) => $s + $x, 10) --> ', reduce([1, 2, 3], fn($s, $x) => $s + $x, 10), PHP_EOL;
echo 'reduce(["A", "B", "C"], fn($s, $x) => $s . $x) --> ', reduce(["A", "B", "C"], fn($s, $x) => $s . $x), PHP_EOL;
echo 'reduce(["A", "B", "C"], fn($s, $x) => [ ...$s, "<$x>"], []) --> ', var_export(reduce(["A", "B", "C"], fn($s, $x) => [...$s , "<$x>"], []), true),PHP_EOL;
echo PHP_EOL;
498 ⟶ 499行目:
$i = 0;
foreach ($ary as $el) {
}
return $result;
504 ⟶ 505行目:
$a1 = [2, 3, 5, 7, 11];
echo '$a1 = [2, 3, 5, 7, 11];', PHP_EOL;
echo '
echo PHP_EOL;
523 ⟶ 524行目:
foreach ($ary as $el) {
if ($code($el, $i++)) {
}
}
return $result;
}
echo '
echo '
echo PHP_EOL;
555 ⟶ 556行目:
echo 'sum($nums) --> ', sprintf("%.53f", sum($nums)), PHP_EOL;
echo 'sum(range(1, 100)) --> ', sprintf("%d", sum(range(1, 100))), PHP_EOL;
echo 'sum([]) --> ',var_export(sum([]), true), PHP_EOL;
echo PHP_EOL;
568 行
return true;
}
echo 'every($a1, fn($x) => $x != 1) --> ', var_export(every($a1, fn($x) => $x != 1), true), PHP_EOL;
echo 'every($a1, fn($x) => $x == 2) --> ';▼
echo PHP_EOL;
583 ⟶ 581行目:
return false;
}
echo 'some($a1, fn($x) => $x != 1) --> ', var_export(some($a1, fn($x) => $x != 1), true), PHP_EOL;
echo PHP_EOL;
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
reduce([1, 2, 3], fn($s, $x) => $s + $x) --> 6
reduce([1, 2, 3], fn($s, $x) => $s + $x, 10) --> 16
reduce(["A", "B", "C"], fn($s, $x) => $s . $x) --> ABC
reduce(["A", "B", "C"], fn($s, $x) => [ ...$s, "<$x>"], []) --> array (
0 => '<A>',
1 => '<B>',
2 => '<C>',
)
$a1 = [2, 3, 5, 7, 11];
0 => 4,
1 => 9,
2 => 25,
3 => 49,
4 => 121,
)
each($a1, fn($x, $i) => printf("%d[%d] ", $x, $i)); --> 2[0] 3[1] 5[2] 7[3] 11[4]
0 => 3,
1 => 5,
2 => 7,
3 => 11,
)
0 => 2,
1 => 3,
2 => 5,
)
$nums = array_fill(0, 10, 0.1);
610 ⟶ 625行目:
sum([]) --> NULL
every($a1, fn($x) => $x != 1) -->
every($a1, fn($x) => $x == 2) -->
some($a1, fn($x) => $x != 1) -->
some($a1, fn($x) => $x == 2) -->
</syntaxhighlight>
|