台灣最大程式設計社群網站
線上人數
1701
 
會員總數:246276
討論主題:189811
歡迎您免費加入會員
討論區列表 >> PHP >> for迴圈串字串的怪問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
for迴圈串字串的怪問題
價值 : 10 QP  點閱數:2250 回應數:9
樓主

Dono
初學者
255 68
1160 160
發送站內信


程式碼如上面這樣..我分頁設定20筆...
但是那個變數upNo我把它印出來..每次最後面都會多一個逗點...
資料庫內只有兩筆資料
我也設定了break怎麼會這樣??

本篇文章發表於2011-09-23 12:09
1樓
回應

溫子
捐贈 VP 給 溫子 檢舉此回應
請把你的 if 括號補齊,避免我們誤會你的程式~
本篇文章回覆於2011-09-23 16:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
程式真的很不正規。最好用正規的寫法。

回到你的正題

你廻圈每次的處理都是$upNo.","
你用BREAK跳掉。那[,]還不是一樣存在??

用實例好了。假設你的資料是A、B、C

回圈的產生字中就會如下
A,
A,B,
A,B,C,
沒資料BREAK。

那是不是最後那個[,]還是一樣存在??你哪埵雩鶗X了。
不要跟我說你用那個if($i < $page_size)做判斷。
問你$i < $page_size這個判斷與有沒有資料有何關聯呢??
你這個判斷等於是多餘的。除非超過你所設定的20個。要不然只要在20筆內。永遠都成立。
本篇文章回覆於2011-09-23 17:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Dono
檢舉此回應
我想我知道 是因為 我的資料量少...所以...就每次都成立...
那有什麼解決辦法嗎.......
還有因為我是PHP新手..我想請問一下 怎樣才算正規..可以舉個例子嗎
本篇文章回覆於2011-09-24 01:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Dono
檢舉此回應
附帶問依下break不是會跳出迴圈嗎
請問這部份 該怎麼寫 會好點??
本篇文章回覆於2011-09-24 01:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
給你一個幾個實例的範例。看你能吸收多少。

依照我的判斷,你的page_size因該是為了要顯示一頁多少筆用的。
所以我是如下的方式處理

這支是你所了解的字元判斷的方式
$str = '';
$n=0;
$page_size = 20;
while($row=mysql_fetch_array($sql))
{
$n++;
if($str!='') $str.=',';
$str .= $row[0];
if($n>=20) break;
}


我比較喜歡用如下的方式

由於並不太確定你的sql。所以我是用假設的資料庫為主。

希望上面的範例你能明白其用意。如有不了解的可以再問。
本篇文章回覆於2011-09-24 02:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

呵呵呵
檢舉此回應
我都用個比較笨的辦法

本篇文章回覆於2011-09-24 10:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

Dono
檢舉此回應

如果按照大大這樣寫..我該怎麼定義我的分頁函數呢??
原本我的$started是拿來定義指標的說.....
$p = isset($_GET["p"]) ? isset($_GET["p"]) : 1 <==能用傳統的方式 表示說明嗎??
因為我原本是寫ASP PHP是最近才剛摸的...很多寫法 都是看別人的 或者網路上的..
可能學到比較舊的....
麻煩大大不厭其煩的幫我解釋
本篇文章回覆於2011-09-24 11:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
ok~~~

先了解你的方式。
你的方式是先將資料全取出後。再跳到你想要的開頭筆數。再取20筆資料出來。
這樣的方式其實有很大的問題,因為當你的資料表的資料很大時,很容易去佔用記憶體。

所以一般來說,最好是直接取你要的20筆資料出來就行了。也就是利用sql語法的limit。來去取得要的資料。

$p = isset($_GET["p"]) ? isset($_GET["p"]) : 1;這個語法。其實就跟下面的程式碼一樣。這是if的簡寫法
認真來說我也寫錯了。因該是要
$p = isset($_GET["p"]) ? $_GET["p"] : 1;

if(isset($_GET["p"]))
{
$p = $_GET["p"];
}
else
{
$p = 1;
}

其說明就是
$參數 = 判斷式 ? 為真的值 : 為偽的值;

再來是你問的 $p = isset($_GET["p"]) ?: 1 ;
這其實是php5.3之後的新的寫法。可以不指定為真的值。
其實我上面的寫法也不對了。因該要 $p = $_GET["p"] ?: 1 ;

新的寫法如果沒指定為真的值。當為真時就是真接代入判斷式的值。只是將寫法簡化。不過這要php5.3以上的版本才有這樣的寫法。如果不是5.3以上的語法會跟你說語法錯誤。

再來你的問題是while($row=mysql_fetch_array($records))

這樣就可以知道你可能對於mysql_fetch_array函數不了解。也對於mysql用的函數也不清楚的樣子。

當用 mysql_query函數所帶入的物件是一種資料表的型態。它並無法取出任何的資料。您還是得要用其它的函數取出資料。
而mysql_fetch_array這個函數就是將你目前所在的記錄目標資料轉成陣列。取完後會自動跳下一筆。

所以我這奡N是用while條件式。讓它一筆一筆的往下取。直到沒資料就停止。

implode函數是將陣列轉成字串。



$test[] = 'A';
$test[] = 'B';
$test[] = 'C';

echo implode(',',$test);//輸出 A,B,C
echo implode('|',$test);//輸出 A|B|C
echo implode('--',$test);//輸出 A--B--C

利用陣列的方式。最後再用字元組合起來。你就不用在去判斷後面的值的問題。這是另外一招將字串串起來的招式。
也就是你不需要用 $upNo=",".$upNo; 這樣的組合。
而是直接先將值存入陣列後。最後再用implode函數用[,]來串起來。不就是你要的東西了。

本篇文章回覆於2011-09-24 14:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

曼菲士
檢舉此回應
Martin Fowler的 “Refactoring – Improving The Design of Existing Code” 一書中有一句話

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
(任何一個傻瓜都能寫出計算機可以理解的程式碼。唯有寫出人類容易理解的程式碼, 才是優秀的程式員。)

----------------------------------------------------------------------------------------------------
多要求自己一點吧..
本篇文章回覆於2011-10-15 15:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.