foreach ブロック内で、配列ポインタが終端(最後の要素)に達したかどうかを判定する Tips です。
<?php $arr = array( '001' => 'りんご', '002' => 'みかん', '003' => 'メロン', '004' => 'バナナ' ); ?>
上記のような配列を、以下のように <a href=””>…</a> でリンクにしたい。区切り文字には | を使いたい。
<a href="./001.html">りんご</a> | <a href="./002.html">みかん</a> | <a href="./003.html">メロン</a> | <a href="./004.html">バナナ</a>
りんご | みかん | メロン | バナナ
こんなときは、foreach を利用するに限りますが、単純にループを回しただけでは、
最後にも | が入ってしまいます。。
<?php foreach($arr as $key => $val): ?> <a href="./<?php echo $key ?>.html"><?php echo $val ?></a> | <?php endforeach; ?>
↓結果
りんご | みかん | メロン | バナナ |
この問題を next() と current() を使って解決します。
以下はソースコードと解説です。
<html> <?php $arr = array( '001' => 'りんご', '002' => 'みかん', '003' => 'メロン', '004' => 'バナナ' ); ?> <?php foreach($arr as $key => $val): next($arr); ?> <a href="./<?php echo $key ?>.html"><?php echo $val ?></a> <?php echo (current($arr) !== false) ? ' | ' : '' ?> <?php endforeach; ?> </html>
↓結果
りんご | みかん | メロン | バナナ
一時変数 $tmp に $arr を代入し、ポインタ判定用として利用します。
<?php $tmp = $arr; foreach($arr as $key => $val): next($tmp); ?> <a href="./<?php echo $key ?>.html"><?php echo $val ?></a> <?php echo (current($tmp) !== false) ? ' | ' : '' ?> <?php endforeach; ?>
current関数を使用しない例
<?php $tmp = $arr; foreach($arr as $key => $val): ?> <a href="./<?php echo $key ?>.html"><?php echo $val ?></a> <?php echo (next($tmp) !== false) ? ' | ' : '' ?> <?php endforeach; ?>
値だけを出力するのであれば、
implode(' | ', $arr);
でこと足ります…