2010-04-22 97 views
2
function is_zipcode_valid($zipcode){ ... } 

如果我叫與功能is_zipcode_valid(08004); 我的參數08004獲取爲8004,基本上它刪除了所有precending 0。PHP函數整數參數問題

我該如何解決這個問題?

感謝

+1

郵政編碼和郵政編碼不是數字。它們是恰好包含數字的標識符。始終把它們當作字符串處理 – staticsan 2010-04-23 01:17:11

回答

3

把它作爲一個字符串,並修改你的函數期待一個字符串,而不是:

is_zipcode_valid('08004'); 

這是不可能的使用整數時保留前導零。如果一個整數值有一個前導零,它在基座8被解釋下面是一個例子:

echo 010; // Output is 8. 
+0

我將郵政編碼存儲在變量$ zipcode中; 我怎麼能告訴PHP,它的一個字符串,而不是整數?理想情況下,我希望我的函數是防彈的,並且能夠處理字符串和整數,我確定有辦法。 – vick 2010-04-22 22:21:32

+0

@vick - 你從哪裏得到變量的值?如果它來自表單提交,那麼它已經是一個字符串。 – 2010-04-22 22:24:33

+0

它在很多地方使用..在其他功能,有時我從MySQL獲取它,並使用該功能,它廣泛用於一個大系統 – vick 2010-04-22 22:26:01

0

PHP把整數作爲base8號碼如果前導零的存在。將您的號碼作爲string

0

正如大家所說的那樣,將其作爲字符串傳入。

如果PHP5,你可以確保它是字符串鑄造

$zipcode = (string) $zipcode; 

$zipcode = "$zipcode"; 




    function is_zipcode_valid($zipcode){ 

    is_string($zipcode) //returns true 
} 

見Php.Net

注意要在:與其鑄造變量爲一個字符串,也可以用雙引號括起變量。

//創建數函數

function form_zipcode($zipcode,$desiredLength){ 
       if(str_len($zipcode) != $desiredLength) 
        { 
         return str_pad($zipcode,$desiredLength,"0",STR_PAD_LEFT); 
        } 
       else 
       { 
        return $zipcode; 
        } 
     } 

使用form_zipcode(55,5)郵編將返回 「00055」;

+0

好的,謝謝! 但我希望發生在該功能.. 我希望這個工作,即使is_zipcode_valid(55); 應該在函數內轉換爲00055。 – vick 2010-04-22 23:25:23

+0

我會說這是不是一個is_zipcode_valid()函數,你希望它是一個form_zipcode()函數 做你想做的,你可以只使用str_pad 我會編輯上面 – 2010-04-22 23:36:26

+0

不工作時,我嘗試form_zipcde(什麼01002);它返回00514 – vick 2010-04-22 23:47:26

0

對不起錯字昨晚(GMT這裏)

<?php 
echo form_zipcode("55",5); 

function form_zipcode($zipcode,$desiredLength){ 
       if(strlen($zipcode) != $desiredLength) 
        { 
         return str_pad($zipcode,$desiredLength,"0",STR_PAD_LEFT); 
        } 
       else 
       { 
        return $zipcode; 
        } 
     } 
?> 

工程作爲預期收益00055 ,你不要求什麼?

+0

或者''sprintf('%05d',$ zipcode)'也可以工作 – 2010-04-23 16:07:02

+0

整潔更緊湊 – 2010-04-23 20:58:18