1. TOPTOP
  2. Webサービス
  3. PHP

コロンを使ったifと波括弧を使ったifでimgタグの出力を管理。三項演算子は使えなかった…

|

php

php_if3jpg

TwitterAPIで画像付きのツイートを、データベースに格納するとこんな感じになります。テーブル作成のクエリ文は以下の通り。

create table tweet_img (
	id int(11) not null auto_increment primary key,
	tw_id text,
	tw_screen varchar(16),
	tw_date varchar(25),
	tw_txt text,
	tw_img0 varchar(256) default "",
	tw_img1 varchar(256) default "",
	tw_img2 varchar(256) default "",
	tw_img3 varchar(256) default ""
);

今回は、これらのテーブルから読み込んでツイートの画像を表示させるときに、感じたことをいくつか書いてみたいと思います。

画像の有無に関わらずimgタグは表示

テーブルのレコードからツイートを表示させるために、PDOStatement::fetchAllを使うことになります。まず何も考えずに書くとこんな感じ。foreachから上の詳しいコードはこちら(新しいタブで開く)どうぞ。

<?php foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) { ?>
	<?php echo $user['tw_screen']."<br/>"; ?>
	<?php echo $user['tw_date']."<br/>"; ?>
	<?php echo $user['tw_txt']."<br/>"; ?>

	<img src="<?php echo $user['tw_img0']; ?><?php echo ':thumb';?>"></br>
	<img src="<?php echo $user['tw_img1']; ?><?php echo ':thumb';?>"></br>
	<img src="<?php echo $user['tw_img2']; ?><?php echo ':thumb';?>"></br>
	<img src="<?php echo $user['tw_img3']; ?><?php echo ':thumb';?>"></br>
<?php echo "<br/>"; ?>

<?php } ?>

php_if1

ですが、無条件でimgタグが表示されるため、src属性がないタグもしっかり表示されます。

画像があるときのみimgタグを表示

では、ifを使って画像の配列(tw_img0からtw_img4)に値がない場合、imgタグを表示させないという条件をつけます。

<?php foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) { ?>
	<?php echo $user['tw_screen']."<br/>"; ?>
	<?php echo $user['tw_date']."<br/>"; ?>
	<?php echo $user['tw_txt']."<br/>"; ?>

	<!-- 配列に値がない場合はimgタグを表示させない-->
	<?php if (!empty($user['tw_img0'])): ?>
		<img src="<?php echo $user['tw_img0']; ?><?php echo ':thumb';?>"></br>
	<?php endif; ?>
	<?php if (!empty($user['tw_img1'])): ?>
		<img src="<?php echo $user['tw_img1']; ?><?php echo ':thumb';?>"></br>
	<?php endif; ?>
	<?php if (!empty($user['tw_img2'])): ?>
		<img src="<?php echo $user['tw_img2']; ?><?php echo ':thumb';?>"></br>
	<?php endif; ?>
	<?php if (!empty($user['tw_img3'])): ?>
		<img src="<?php echo $user['tw_img3']; ?><?php echo ':thumb';?>"></br>
	<?php endif; ?>

	<?php echo "<br/>"; ?>

<?php } ?>

php_if2

これで配列に値がないときは、imgタグが表示されなくなりました

ifの種類について

実はこのコードに行きつくまで、条件文についてハマってしまいました。その条件文には、次の3つがあります。

  • 波括弧を使ったif
  • コロンを使ったif
  • 三項演算子

上の例では、コロンを使ったifを用いています。波括弧を使ったifでも、同様に実行できます。

<?php if(!empty($user['tw_img0'])) { ?>
	<img src="<?php echo $user['tw_img0']; ?><?php echo ':thumb';?>"></br>
<?php } ?>
<?php if(!empty($user['tw_img1'])) { ?>
	<img src="<?php echo $user['tw_img1']; ?><?php echo ':thumb';?>"></br>
<?php } ?>
<?php if(!empty($user['tw_img2'])) { ?>
	<img src="<?php echo $user['tw_img2']; ?><?php echo ':thumb';?>"></br>
<?php } ?>
<?php if(!empty($user['tw_img3'])) { ?>
	<img src="<?php echo $user['tw_img3']; ?><?php echo ':thumb';?>"></br>
<?php } ?>

ですが三項演算子を用いると、文法エラーが指摘されます。

<?php if (!empty($user['tw_img0'])) ? "" : "<img src="<?php echo $user['tw_img0']; ?><?php echo ':thumb';?>">"; ?></br>
<?php if (!empty($user['tw_img1'])) ? "" : "<img src="<?php echo $user['tw_img1']; ?><?php echo ':thumb';?>">"; ?></br>
<?php if (!empty($user['tw_img2'])) ? "" : "<img src="<?php echo $user['tw_img2']; ?><?php echo ':thumb';?>">"; ?></br>
<?php if (!empty($user['tw_img3'])) ? "" : "<img src="<?php echo $user['tw_img3']; ?><?php echo ':thumb';?>">"; ?></br>

三項演算子がスッキリとして良さげなんですが、エラーの原因は分かりません(汗

追記(2015/1/27)

後日、PHPタグ(<?php ?>)の中では、入れ子ができないことが分かりました。三項演算子の前に<?phpを使って、かつimgタグの中でも<?phpでも使うというのは不可ということです。

〔参考サイト〕