コロンを使った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]
<?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]

php_if1

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

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

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

[php]
<?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]

php_if2

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

ifの種類について

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

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

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

[php]
<?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]

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

[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>
[/php]

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

追記(2015/1/27)

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

〔参考サイト〕

php

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次