iT邦幫忙

0

請教一下大大們~~

php
	echo '<table border="1" width="800" align="center">';
	echo '<caption><h1>使用一個while循環輸出的表格</h1></caption>';
	$i=0;
	while($i<1000){
		if($i%10==0){
				if($i%20==0){
						$bg="#ffffff";
				}else{
						$bg="#cccccc";
				}
				echo '<tr bgColor="'.$bg.'">';
		}
		echo '<td>'.$i.'</td>';
		$i++;
		
		if($i%10==0){
				echo '<tr>';
		}
	}
	echo '</table>';

在 echo '<tr bgColor="'.$bg.'">' 這句 , 為什麼當要顯示顏色時的$bg前後要加
"."還有單引號和雙引號 ; 不能直接就把$bg寫在雙引號裡面嗎(雖然我試過,但不是我要的..),
滿想知道他們的邏輯~~~還有在 echo '</table>' 裡的標籤前後一定要加單引號嗎 ??

求解~~~感謝!!!!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

4

<pre class="c" name="code">
<table border="1" width="800" align="center">
<caption><h1>使用一個for循環輸出的表格</h1></caption>
<?php for($i = 0;$i< 1000 ;$i++):?>
<?php if($i % 10 == 0 && $i != 0):?>
</tr>
<?php endif?>
<?php if($i % 10 == 0):?>
<tr style="background:<?php echo $i % 20 == 0?'#ffffff':'#cccccc'?>">
<?php endif?>
<td><?php echo $i?></td>
<?php endfor?>
</table>

這只是沒把你的邏輯抽出來只是直接將你的code改成另一種比較好懂一點的方式。
事實上這種過多的邏輯判斷本身是不應該放在畫面顯示的。
換成如下的方式做就好的多:

&lt;pre class="c" name="code">
&lt;?php
$result = array();
for($i = 0;$i &lt; 1000;$i ++){
    $result[floor($i / 10)][] = $i;
}
?>
&lt;table border="1" width="800" align="center">
&lt;caption>&lt;h1>使用一個for循環輸出的表格&lt;/h1>&lt;/caption>
&lt;?php foreach($result as $key => $row):?>
&lt;tr style="background:&lt;?php echo $key % 2 == 0?'#ffffff':'#cccccc'?>">
    &lt;?php foreach($row as $value):?>
    &lt;td>&lt;?php echo $value?>&lt;/td>
    &lt;?php endforeach?>
&lt;/tr>
&lt;?php endforeach?>
&lt;/table>

把資料變成更容易處理的方式就不會在html的code中跑多餘的判斷方式。
可能你看的範例只是要講解while......不過那個方式不是太好。
資料邏輯和顯示的東西能夠分開就儘量分開。

忘了說。
把資料邏輯和顯示分開之後~~~~~~~
單雙引號的層級就很容易明確的區分出來了。
要注意的是:
單引號:裡面所有的文字不會被php解析,會原原本本將內容顯示:

&lt;pre class="c" name="code">
$name = 'bill';
echo '$name';

會顯示$name

&lt;pre class="c" name="code">
$name = 'bill';
echo "$name";

會顯示bill
但如果變這樣

&lt;pre class="c" name="code">
$name = 'bill';
echo "$namewang"

會變成找不到姓名(或是未宣告變數)
所以要改成:

&lt;pre class="c" name="code">
$name = 'bill'
echo "{$name}wang";

這樣就可以讓變數和字串分開。
所以你注意到了嗎?雙引號內的變數會被php給解析。
所以雙引號才被稱為魔術引號。
只是用的時候卻要很小心很小心很小心。
這就是為什麼建議上還是別把變數寫在魔術引號內~~~切出來串接有點難看但卻比較不會有問題。

alanalam8 iT邦新手 5 級 ‧ 2015-01-11 15:04:42 檢舉

感謝sam哥非常詳細

2
wiseguy
iT邦超人 1 級 ‧ 2015-01-11 11:38:03

我想你是搞不清楚單引號、雙引號到底是 html 的,還是 php 的。
比較一下下面的幾行程式,它們的效果都一樣,如果你可以分辨它們的用法,那你對php的引號、字串串接、字串內含變數等概念就有一定程度了。

&lt;pre class="c" name="code">echo '&lt;tr bgColor="'.$bg.'">';
echo '&lt;tr bgColor="',$bg,'">';
echo "&lt;tr bgColor='".$bg."'>";
echo "&lt;tr bgColor=\"".$bg."\">";
echo "&lt;tr bgColor='$bg'>";
echo "&lt;tr bgColor=\"$bg\">";

我要發表回答

立即登入回答