php 字串和數字比較一些問題

2021-09-07 08:03:44 字數 1791 閱讀 4458

php

字串和數字比較一些問題

,因為數字與字元在

php中是不同的資料型別,所以在比較時可能會有很多的問題。

今天遇到乙個問題,呼叫對方介面,按照介面說明,返回為數字0,

1,2等等,其中

0標示成功,其他表示不同的錯誤**。程式通過

if ($ret == 0)

進行判斷,開始程式是好的,今天出現問題了,由於對方介面修改,直接返回字母字串作為錯誤資訊提示,然後我這邊就悲劇了,上述判斷永遠都為

true

。原因在於

php是弱型別語言,所以可以對兩個不同型別的變數進行比較操作,但最終進行比較前,

php會把某一方轉換稱另一方一樣的型別,這點很重要。如果是字串和數字進行比較,那麼

php會把字串強制轉換稱數字,對於純字母的字串,那麼轉換後就是

0了,所以

if ($ret == 0)

成了。php手冊/

語言參考

/運算子

/比較運算子

可以找到. 在

php裡當兩個數字型字串

(只含數字的字串

)進行比較的時候是直接轉換成數值進行比較的

如下示例

:(注意$a和

$b兩個變數的最後一位不相等

) **如下

複製**

//示例1 

<?php 

$a = '511203199106034578'; 

$b = '511203199106034579'; 

if ($a==$b) else  

?>

執行上面的程式卻發現結果為

equal(

非我們認為的結果

) 我們把$a與

$b分別加乙個字母a進去

**如下

複製**

//示例2 

<?php 

$a = 'a511203199106034578'; 

$b = 'a511203199106034579'; 

if ($a==$b) else  

?>

這次輸出的是

notequal(

正確的結果

) 示例1為

equal

是因為php

把兩個數字型字串轉換成數字型

,而這兩個數字剛好相等如下示例

**如下

複製**

<?php 

$a = 511203199106034578; 

$b = 511203199106034579; 

echo $a; // 輸出 5.1120319910603e+17 即511203199106030000 

echo $b; // 輸出 5.1120319910603e+17 即511203199106030000 

?>

所以我們在示例

1中得到的結果是

equal

避免出現這種非預期結果的情況是使用型別比較符

===如下示例(如果

$a 等於

$b,並且它們的型別也相同

) **如下

複製**

//示例4 

<?php 

$a = '511203199106034578'; 

$b = '511203199106034579'; 

if ($a===$b) else  

?>

這樣我們就可以得到預期中的

notequal

js 字串和數字大小比較

1 純字串比較,轉換成ascii碼在進行比較 2 純數字和純數字字串相比較,則將字串數字隱式轉換成數字再進行比較 3 純數字和非純數字字串比較,都返回false 注意 1.數字和字串比較大小,js會優先將字串轉成數字來比較 如果將數字轉成字串,那麼還要將字串轉成字元編碼才能比較,但是將字串轉成數字就...

關於指標字串和陣列字串的一些經驗

經驗 1.如果用ap和bp的話,是無法引用的,因為它不是指向乙個常量的。2.如果用ap1和bp1的話,可以引用,但是交換的其實是 位址,因為常量區是無法被修改的。3.而如果把函式改為 字元的引用,就是交換的是內容。想想這是為什麼?上面的為什麼指向的是常量區?二 為了解決這個疑問,我們來看看實質的差別...

字串的一些問題 關鍵是KMP演算法

動態順序串 include using namespace std 動態順序串的定義 typedef struct dstring dstring 初始化動態串 void initstring dstring s 串常量的長度 int lenstring char chars return len ...