2017-06-01 60 views
0

我正在使用PHP版本5.6.25。以下代碼是複製問題所需的全部內容。nl2br將true轉換爲int並將false轉換爲空字符串

$data['foo'] = true; 
$data['bar'] = false; 
var_dump($data); 
$data['foo'] = nl2br($data['foo']); 
$data['bar'] = nl2br($data['bar']); 
array_walk_recursive($data, "filter"); 
var_dump($data); 

這給出以下結果。

array (size=2) 
    'foo' => boolean true 
    'bar' => boolean false 
array (size=2) 
    'foo' => string '1' (length=1) 
    'bar' => string '' (length=0) 

這是一個PHP的錯誤?有沒有解決方法?

+0

爲什麼你會想要在布爾值上使用nl2br()? – rtfm

+1

'var_dump(nl2br(true));'// string(1)「1」它與array_walk無關 – rtfm

+0

@rtfm我運行這個的數組是混合的。在使用它之前,我應該檢查該值是否是一個字符串。這將爲我解決這個問題。我仍然認爲這是意想不到的行爲。 – Goose

回答

1

從手動nl2br

串nl2br(字符串$串[,布爾$ is_xhtml =真])

nl2br需要字符串作爲輸入,鑄造一個布爾爲字符串返回1爲真,「」爲假;所以在這種情況下沒有什麼驚喜。

在您的過濾功能中,您可以在決定如何過濾之前檢查變量類型。

+1

不,將一個布爾值轉換爲一個字符串分別返回'1'或''''爲'true'和'false'。 http://php.net/manual/en/language.types.string.php#language.types.string.casting – Sammitch

+0

@Sammitch感謝您的更正,隨時編輯hte答案,使其更好 – rtfm