---
tags: 程式設計基礎,字串尋找,php,html
---
字串尋找
=======
這邊我們指定使用while來製作這個功能,因為我們並不清楚需要找的字串長度為多少,以及到底要找到那個部份才需要停止,這種不確定次數的情境,比較適合使用while。
我們先對問題進行分析,再來思考如何撰寫程式:
1. 需要一個變數來儲存原始字串。
2. 需要一個變數來儲存要尋找的字元。
3. 由原始字串的第一個字元開始逐一和要尋找的字元做比較。
4. 如果比較的結果是相符的,則尋找結束,並記下字元在原始字串的位置。
5. 如果比較的結果不相符,則往下一個字元尋找及比較。
6. 如果尋找到原始字串的最後一個字元都還沒有找到相符的,那麼就停止尋找,並輸出"沒有找到相符的字元"
我們先解決比較簡單的變數問題:
```php=
$string="today is a good day to play"; //原始字串
$target="d"; //要尋找的字元
```
在PHP中,字串本身其實是一個字元組成的陣列,因此我們可以使用`$var[2]`的方式來取出字串中的某個字元,利用這個特性,我們就可以使用迴圈來完成對原始字串做遍歷的動作。
接著是比較的問題,我們在每一次的迴圈中,每取出一個字元就要和`$target`做比較,然後根據比較的結果來決定後續的動作,這裹的比較我們使用`if(){}`來處理:
```php=
if($string[$i]==$target){
//如果找到了相符的字元.....
}else{
//如果沒找到相符的字元.....
}
```
接著我們要如何判斷整個迴圈何時該停止?如何讓迴圈知道已經找到最後一個字元了?
判斷字串的長度可以使用`strlen()`這個函式,而是否找到的狀態,我們可以設一個變數來儲存狀態,預設為false,如果有找到相符的字元,則將這個變數的值改為true。
另外我們也需要一個變數來儲存目前尋找到的字串位置,隨著迴圈的進行,這個值會每次加1;
```php=
$found=false; //建立一個是否找到的狀態值,預設為false
$pos=0; //建立一個位置的變數,用來記錄目前進行到字串的那個位置
```
綜合以上的設定,我們開始撰寫程式來滿足我們做的分析:
```php=
$string="today is a good day to play";
$target="d";
$found=false;
$pos=0;
while(!$found && $pos<strlen($string)){ //如果還沒找到並且位置小於字串的長度
if($string[$pos]==$target){
$found=true;
echo "找到了,位置在" . $pos;
}
$pos++;
}
if($found==false){
echo "沒有找到";
}
```
PHP內建的尋找字串函數為`strpos()`
課後練習
------
1. 嘗試將尋找目標由一個字元改成多個字元,比如尋找"day"。
2. 如果要以for迴圈來製作這個功能,應該要如何修改程式碼?