nullチェック不要
配列($arr)がnullだとエラーになるので、is_array()でチェックしてたけど、
before
if(is_array($arr)) {
foreach($arr as $value) {
(--- code ---)
}
}
キャストすれば、空配列になるので、チェック不要。
after
foreach((array)$arr as $value) {
(--- code ---)
}
コードが短くなった。
ジェネレーター・・・?
foreachは配列のためだけにあると思ってた。
複数の要素を1つの変数で扱うためには、とにかく配列にぶっこむものだと思ってた。
しかし、「ジェネレーター」なるものがあるらしい。
配列を定義して、必用な分だけ値をセットする代わりに、
関数を定義して、その中で必要な分だけyield [値];
と追加していく。
yield ([キー]=>[値]);
とすれば、連想配列のようなkey-value形式にも対応可能。
このyieldを含んだジェネレーター関数を実行すると、ジェネレーターオブジェクトが返され、
配列と同様にforeach文で扱うことができる。
array
$arr = [1, 3, 5];
foreach($arr as $value) {
と定義する代わりに
generator
function myGenerator() {
yield 1;
yield 3;
yield 5;
}
foreach(myGenerator() as $value) {
と定義できる。
値に規則性がある場合は、for文などと組み合わせて、値を生成できる。
何度もyieldと書かなくて済む。
引数を受け取り、実行時に値を指定できるような関数にしておけば、使い回しができそう。
generator
function myGenerator($start, $end, $step) {
for($i=$start; $i<$end; $i+=$step) {
yield $i;
}
}
foreach(myGenerator(1, 10, 2) as $value) {