読者です 読者をやめる 読者になる 読者になる

絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

まって!この子たちも忘れないで><

php neta

ハッと気づいたら書いていた。後悔はしてない。


via. shin blog PHP 配列を回すならforかforeachか - Shin x blog


forとforeachだけがループじゃないよ><
PHPだとforeach便利すぎで忘れられてるけど、僕はwhileって美しいと思うんだ!><
ということでポインタdo〜whileを使ってポインタ遷移とSPL版

<?php

$list = array();
$list[] = array('id' => 1, 'name' => 'hoge');
$list[] = array('id' => 2, 'name' => 'foo');
$list[] = array('id' => 3, 'name' => 'bar');

$current = current($list);
do {
  echo $current['id'] . PHP_EOL;
  echo $current['name'] . PHP_EOL;
} while ($current = next($list));
?>
<?php

$list = array();
$list[] = array('id' => 1, 'name' => 'hoge');
$list[] = array('id' => 2, 'name' => 'foo');
$list[] = array('id' => 3, 'name' => 'bar');

$listobj = new ArrayObject($list);
$iterator = $listobj->getIterator();

do {
  $tmp = $iterator->current();
  echo $tmp['id'] . PHP_EOL;
  echo $tmp['name'] . PHP_EOL;
  $iterator->next();
} while($iterator->valid());
?>

ぶっちゃけdo〜while+ArrayIterator常用はガチ。前者はSPL知ってからはでんでん使ってない。
でも、こういう構造の時はどう見ても美しくもないしコーディング効率も悪いですねありがとうございました的な。