2015-04-27 21 views
0

我使用str_replace填充了一些值爲數字的模板。 當一個數字是0(零)時,PHP認爲它是假的並且什麼也不寫。顯示一個零

我試圖在每一個解決方案中發現SO和網絡:

  • INTVAL($ myZeroVar)
  • floatval($ myZeroVar)
  • strval($ myZeroVar)
  • (串)$ myZeroVar
  • ''。$ myZeroVar使用number_format,sprintf的,str_pad
  • 隨機測試...

沒有這些工作。

要顯示它的唯一方法是將$ myZeroVar與空格($myZeroVar.' ')連接起來。 但是如果我不想要這個空間呢?

我做錯了什麼?也許在PHP配置?

不要告訴我你每次輸出數字都連接一個空格嗎?

感謝

編輯:

這裏是我真棒模板系統(開玩笑):

$template = 'Some text with a {value}'; 
$data = 0; 
$template = str_replace('{value}', $data, $template); 

的結果是: 「有些文字有」

編輯:解決

好的。就在我跑我的辦公桌下躲起來,我必須告訴你,這個問題從一個線,剛好我真棒模板系統前:

if(!empty($data) 

所以,現在我通過$val === '' || $val === null

更換此,一切都很好... 我愛失去小時來解決由我造成的問題。

看起來我永遠不會在這裏做一個有用的職位!

謝謝大家。

不要降低太多,這個帖子對新人有些用處: 總是檢查3次!

+1

並非每種語言都認爲0 =假?你可以添加更多的代碼,你得到什麼,你期待什麼,不知道你想要做什麼.. – Naruto

+3

*「有時我討厭這種愚蠢的語言。」* - 這是一個工匠指責他的工具。這不是「工具的錯」。我從你的問題中刪除了這個咆哮。 –

+0

@naruto:他想把0聲明爲一個字符串,而不是一個int,它是false的表示。在我的easyPHP開發服務器上,(字符串)$ myZeroVar正在工作,var_dump('0')也是。我認爲它來自你的配置。 –

回答

0

我的變量沒有顯示,不是因爲一些錯誤或配置錯誤,而是因爲僅當變量不是empty()時才填充模板。

和空函數0

($var !== '' && $var !== null)更換!empty($var)返回true解決了這個問題。

0

嘗試這樣的事情

<?php 
    echo "{$myZeroVar}"; 
?> 

它爲我工作「{$ VAR}」這種格式已經停止PHP讀取它當作真/假,並作爲一個字符串,而不是

+0

爲什麼OP要「試試這個」?請添加一個解釋,你做了什麼,爲什麼你這樣做,不僅是爲了OP,而是爲了將來的訪問者SO。 –

+0

不錯的嘗試,但同樣的結果:) – FLX

0

如何運行測試看看這個值是否爲零。然後修改它爲一個字符串零而不是?

$template = 'Some text with a {value}'; 
$data = 0; 
if (!$data) { 
    $data = "0"; 
} 
$template = str_replace('{value}', $data, $template); 
0

爲什麼不使用sprintf而不是str_replace?

這樣你就可以在你的字符串模板中設置你的數據類型。

$template = 'Some text with a %d'; 
$data = 0; 
$result = sprintf($template, $data); 
+0

sprintf是我的一個測試:)我只是測試錯誤的地方...:D – FLX

0

printf命令及其朋友處理像你想要的格式。

$template = "Some text with a %.0f\n"; 
$data = 0; 
$output = sprintf($template, $data); 

如果你想在你的軟件中將你的模板轉換爲printf格式,那也是一個選項。

$template = "Some text with a {value}\n"; 
$data = 0; 
$template_fmt = str_replace('{value}', '%.0f', $template); 
$output = sprintf($template_fmt, $data); 

請注意,我用%.0f代替%d,因爲它爲您提供了對支持更復雜的浮點數的一個簡單的進展。要麼應該這樣做。

+0

謝謝我的朋友,但請不要浪費更多的時間。由empty()引起的問題...我不知道我應該如何處理這樣的線程? – FLX

+0

@FC'很高興你解決了它!如果您的解決方案在答案中被暗示,請選中帶有複選標記的答案。如果不是,並且您的問題以某種方式錯過了標記,請在您的問題中進行澄清,然後張貼您自己的答案並選擇它。沒有人會得到「最好的分數」,但它會清楚地確定問題和解決方案,哪一個更重要。 – ghoti