「PHP/入門/関数とは」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎array_*関数の拡張: 結果を説明的に
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 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 {
$result = 0;
$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) {
array_push($result,[] = $code($el, $i++));
}
return $result;
504 ⟶ 505行目:
$a1 = [2, 3, 5, 7, 11];
echo '$a1 = [2, 3, 5, 7, 11];', PHP_EOL;
echo 'implode(",", map($a1, fn($x) => $x * $x)) --> ', implodevar_export(",", map($a1, fn($x) => $x * $x), true), PHP_EOL;
echo PHP_EOL;
 
523 ⟶ 524行目:
foreach ($ary as $el) {
if ($code($el, $i++)) {
array_push($result,[] = $el);
}
}
return $result;
}
echo 'implode(",", filter($a1, fn($x) => $x % 2)) --> ', implodevar_export(",", filter($a1, fn($x) => $x % 2), true), PHP_EOL;
echo 'implode(",", filter($a1, fn($x) => $x < 6)) --> ', implodevar_export(",", filter($a1, fn($x) => $x < 6), true), PHP_EOL;
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;
var_dump(sum([]));
echo PHP_EOL;
 
568 行
return true;
}
echo 'every($a1, fn($x) => $x != 1) --> ', var_export(every($a1, fn($x) => $x != 1), true), PHP_EOL;
var_dumpecho 'every($a1, fn($x) => $x == 2) --> ', var_export(every($a1, fn($x) => $x !== 12), true), PHP_EOL;
echo 'every($a1, fn($x) => $x == 2) --> ';
var_dump(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;
var_dumpecho 'some($a1, fn($x) => $x == 2) --> ', var_export(some($a1, fn($x) => $x !== 12), true), PHP_EOL;
echo 'some($a1, fn($x) => $x == 2) --> ';
var_dump(some($a1, fn($x) => $x == 2));
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];
implode(",", map($a1, fn($x) => $x * $x)) --> 4,9,25,49,121array (
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]
 
implode(",", filter($a1, fn($x) => $x % 2)) --> 3,5,7,11array (
0 => 3,
implode(",", filter($a1, fn($x) => $x < 6)) --> 2,3,5
1 => 5,
2 => 7,
3 => 11,
)
echo 'everyfilter($a1, fn($x) => $x ==< 26) --> ';array (
0 => 2,
1 => 3,
2 => 5,
)
 
$nums = array_fill(0, 10, 0.1);
610 ⟶ 625行目:
sum([]) --> NULL
 
every($a1, fn($x) => $x != 1) --> bool(true)
every($a1, fn($x) => $x == 2) --> bool(false)
 
some($a1, fn($x) => $x != 1) --> bool(true)
some($a1, fn($x) => $x == 2) --> bool(true)
</syntaxhighlight>