PHPの連想配列をたまに使おうとして忘れがちなのでメモ。
達成したいこと
- ナビゲーションの並びを後からでも変更しやすいようにしたい
- ナビゲーションに画像を使用したときに画像パスを含めるとソースがカオスなことになるのをナントカしたい
- ナビゲーションは基本的に同じようなことを繰り返し書くことになるけど、書くのも見た目的にもなんだか面倒臭いので同じことを何度も書きたくない
環境
- PHPが使用出来る環境
- PHPのバージョンは5.4以降ならきっと大丈夫
想定
- WordPressでファイルパスやページのパスを羅列する場合
-
echo esc_url(home_url('/'))
云々を定数に置き換えればWordPressでなくても使えます
-
避けたいパターン
避けたいパターン
<li role="menuitem"><a href="<?php echo esc_url(home_url('/')); ?>">HOME</a></li>
<li role="menuitem"><a href="<?php echo esc_url(home_url('/')); ?>about/">ABOUT</a></li>
<li role="menuitem"><a href="<?php echo esc_url(home_url('/')); ?>gallery/">GALLERY</a></li>
上の例は3つしかないので未だマシですが、これが5つ以上になったら見るだけで発狂しそうです。
念願叶ったパターン
念願叶ったパターン
<?php
$navLists[] = array( 'url' => '', 'name' => 'HOME' );
$navLists[] = array( 'url' => 'about/', 'name' => 'ABOUT' );
$navLists[] = array( 'url' => 'gallery/', 'name' => 'GALLERY' );
?>
<?php foreach ( $navLists as $navList ): ?>
<li role="menuitem"><a href="<?php echo esc_url(home_url('/')); ?><?php echo $navList['url']; ?>"><?php echo $navList['name']; ?></a></li>
<?php endforeach; ?>
「記述量増えてるじゃないか」 と何処からか石ころでも投げられてきそうですが、以下のように何かしらの変更があったときに煩わしさが減ります。
こんなとき便利かも
- ちょっとデザインを変更したい。(大抵ちょっとの変更じゃ済まないというツッコミは今は無しで)
- クラスだのIDだのリストの数の分だけ変更せずとも、一箇所の変更で済みます。
- 並び順を変えたい。一部を削除したい。一部を追加したい。
- 一部のページのURLを変えたい。一部のページのページ名を変えたい。