PHP學習之字串比較和查詢

2021-07-05 10:12:26 字數 4238 閱讀 1414

1. 字串比較

在php中,可以用==(雙等號)或者 ===(三等號)來比較字串。兩者的區別是雙等號不比較型別,三等號會比較型別,它不轉換型別;用雙等號進行比較時,如果等號左右兩邊有數字型別的值,剛會把另乙個值轉化為數字,然後進行比較。這樣的話,如果是純字串或者null時,會轉化為0進行比較。同樣,大小於號也和等號一樣,比較時可能出現不正確的結果。

所以,比較字串可以用php的自帶函式strcmp和strcasecmp。其中strcasecmp是strcmp的變種,它會先把字串轉化為小寫再進行比較。 如下**:

var_dump(0 == 'test');

var_dump(0 == '');

var_dump(5 > 't');

var_dump(strcmp(5, 't'));

結果為(第1~3結果是不對的,只有第4個是對的):

bool(true)

bool(true)

bool(true)

int(-1)

2. 字串處理

1. 子串

$sub = substr(string, start[, length]);

2. 子串替換

$newstring = substr_replace(string, new, start[, length]);

用這個函式可以實現字串的插入,刪除操作。這個函式的start和length可以為負數。分別表示從後開始計算以及保留最後幾位不替換。 3. 字串反序

$newstring = strrev(string);

4. 重複字串

$newstring = str_repeat(string, count);

返回乙個重複count次string的新字串。

5. 填充字串

$newstring = str_pad(to_pad, length[, with[, type]]);

其中type有:str_pad_right(預設)、str_pad_left和str_pad_both三種;with預設為空格。函式表示把to_pad字串用with填充為乙個長度為length的字串。 如下**:

// 子串

var_dump(substr('1234567890', 8)); // 90

var_dump(substr('1234567890', 0, 2)); // 12

// 反方向子串

var_dump(substr('1234567890', -8)); // 34567890

var_dump(substr('1234567890', -8, -2)); // 345678

var_dump(substr('1234567890', -8, 2)); // 34

// 插入

var_dump(substr_replace('1234567890', 'a', 0, 0)); // a1234567890

// 刪除

var_dump(substr_replace('1234567890', '', 8)); // 12345678

// 反方向刪除

var_dump(substr_replace('1234567890', '', -2, -1)); // 123456780

// 替換

var_dump(substr_replace('1234567890', 'a', 0, 1)); // a234567890

// 反方向替換

var_dump(substr_replace('1234567890', 'a', -2, -1)); // 12345678a0

// 字串反轉

var_dump(strrev('1234567890')); // 0987654321

// 重複字串

var_dump(str_repeat('12', 3)); // 121212

// 填充字串

var_dump(str_pad('a', 10, '12')); // a121212121

var_dump(str_pad('a', 10, '12', str_pad_left)); // 121212121a

var_dump(str_pad('a', 10, '12', str_pad_both)); // 1212a12121

3. 分解字串

在php中,字串的分解用explode,合併用implode(join是implode的別名),標記用strtok。還有另乙個函式slipt也可以分解(正則分解),但5.3以後版本已經不推介了。 另外php中還有乙個sscanf()函式,用於讀取字串。

strtok標記時,用strtok($str, $token)來初始化,用strtok($token)來繼續取值。

**如下:

$str = '1,2,3';

$arr1 = explode(',', $str); // array('1', '2', '3')

$arr2 = explode(',', $str, 2); // array('1', '2,3')

$str1 = implode(',', $arr1); // '1,2,3'

$str2 = strtok($str, ','); // 1

$str3 = strtok(','); // 2

$str4 = strtok(','); // 3

// array(86, 10, 88888888, 'beijin')

$arr3 = sscanf('+86(10)88888888 beijin', '+%d(%d)%d %s');

4.字串查詢

在php中,字串的查詢有三個系列。返回位置的、返回字串的、掩碼個數匹配。其中,返回位置的的函式一共有兩個,strpos()和 strrpos();返回字串的也有兩個strstr()和strchr();返回掩碼匹配數的函式有strspn()和strcspn()。

strpos表示從左邊開始計數,返回要查詢的字串第一次出現的位置;strrpos表示從右邊計數,返回要查詢的字串第一次出現的位置。

strstr表示從左邊計數,返回要查詢字串第一次到結尾的子串(包括查詢字串),當查詢的是字元時,可以用ascii碼數字來表示字元;stristr表示不區分大小查詢;strchr是strstr的別名;strrchr返回字元最後出現到結尾的子串。

strspn表示從左邊計數,第一次出現非掩碼之前的子串的字元數;strcspn表示從左邊計數,第一次出現掩碼之前的子串的字元數。

示例**:

$pos = strpos('this a hello world program', ' '); // 4

$pos = strpos('this a hello world program', 32); // 4

$pos = strrpos('this a hello world program', ' '); // 18

$pos = strrpos('this a hello world program', 32); // 18

$str = strstr('this a hello world program', ' '); // " a hello world program"

$str = strstr('this a hello world program', 32); // " a hello world program"

$str = stristr('this a hello world program', ' a'); // "a hello world program"

$str = stristr('this a hello world program', 65); // "a hello world program"

$str = strrchr('this a hello world program', ' '); // " program"

$str = strrchr('this a hello world program', 32); // " program"

$str1 = "12345 12345 12345";

$len = strspn($str1, '12345'); // 5

$len = strcspn($str1, ' '); // 5

php字串如何比較,PHP字串比較

我們在 中用的最多的邏輯是什麼?你知道如下的幾段 的布林結果分別是什麼麼?var dump 1 1e0 var dump 1 0x1 var dump 20 2e1 var dump 10 0x0a 等等 對,也許你會說在php手冊的附錄中有一部分關於這個問題的總結.問題是,這只是知其然,那麼所以然...

php 學習筆記,比較字串

str1 str2 str2 str10 str3 yj str4 yj echo strcmp str1,str2 echo strnatcmp str1,str2 echo strcmp str3,str4 echo strcasecmp str3,str4 echo strnatcmp str...

PHP字串比較

我們在 中用的最多的邏輯是什麼?你知道如下的幾段 的布林結果分別是什麼麼?var dump 1 1e0 var dump 1 0x1 var dump 20 2e1 var dump 10 0x0a 等等 對,也許你會說在php手冊的附錄中有一部分關於這個問題的總結.問題是,這只是知其然,那麼所以然...