ふと、他人の書いたPHPコードgithub で眺めていると、次のような記述に遭遇した。
list() と foreach で配列を変数に展開する。
<?php $a = [ 'a','b' ,'c']; $arr = [$a, $a , $a ]; foreach($arr as list($x, $y, $z)){ var_dump($x,$y,$z); }
とても楽ちんに書ける。本当に楽。list 関数と foreachで代入までまとめてできる。
このような連想配列でも
<?php foreach ($cols as $col){ $name = $col['name']; $type = $col['type']; $constraint = $col['constraint']; }
やばいぐらいスッキリする。
<?php foreach ($cols as list('name'=>$name,'type'=>$type,'constraint'=>$constraint)){ var_dump($name); }
<?php foreach ($cols as list($name,$type,$constraint)){ var_dump($name); }
この書き方は革命だわ。
ただし、配列の添字(キー)が必ず存在する必要があること、サイズが同じであること、が前提条件になる。
エラーは出やすくなるが、配列のタイプ型チェックができると考えると、メリットのほうが大きい。
知らなかったよ。気づかなかったよ。
連想配列を一気に変数に取り出す。
<?php $a = [ 'a'=>1,'b'=>2 ,'c'=>4]; $arr = [$a, $a , $a ]; foreach($arr as list('a'=>$x, 'b'=>$y, 'c'=>$z)){ var_dump([$x,$y,$z]); }
list と foreach を組み合わせることで代入が必要なくなって、処理が明確になる。
なんで今まで気づかなかった。