2012-03-21 42 views
1

我想將前導零添加到變量以獲取6位數字符串。 我使用此代碼僅當php存在時才添加前導零

echo str_pad($var, 6, '0', STR_PAD_LEFT) . str_pad($var2, 6, '0', STR_PAD_LEFT); 

這是正常的,但如果是$ var或$ VAR2是空的,結果是

如果是$ var或$ VAR2不存在,str_pad的結果必然是空的,我

我可以使用

if($var){ 
    $test1 = str_pad($var, 6, '0', STR_PAD_LEFT); 
} 
if($var2){ 
    $test1 .= str_pad($var2, 6, '0', STR_PAD_LEFT); 
} 
echo $test1; 

我只是想知道,如果這些代碼可以更乾淨或simplier。

謝謝。

編輯:我嘗試另一種解決方案:

function addZero($number, $length){ 
    if(!$number){ return false; } 
    return str_pad($number, $length, '0', STR_PAD_LEFT); 
} 

,只是

echo addZero($var, 6) . addZero($var2, 5); 

醜嗎?

回答

1

嗯,你可以這樣做:

$result = ""; 
$result .= $var ? str_pad($var, 6, '0', STR_PAD_LEFT) : null; 
$result .= $var2 ? str_pad($var2, 6, '0', STR_PAD_LEFT) : null; 

這真是隻寫了一個位更緊湊同樣的事情(它確保$result始終雖然定義)。我絕對不會建議儘量讓代碼稍微縮短一些,但這樣會使代碼難以閱讀。

如果你有一個未知的或已知的,但大量的變量進行處理,那麼會有更好的解決方案。但只有兩個,這樣的硬編碼很好。

+0

是的,很好的解決方案。你是對的,我沒有很多變數,所以都很好。我用另一個似乎很棒的解決方案編輯了我的問題(如果添加另一個函數不是太難看);) – Hugo 2012-03-21 14:13:33

0

如果var爲空,您可以將三元操作填入str_pad()調用中以替換零長度,但它有點難看。在每個str_pad()調用中,如果變量不爲空,則表達式!empty($var) ? 6 : 0將提供填充長度6,如果爲空,則填充長度爲0,導致空變量不輸出。

echo str_pad($var1, (!empty($var1) ? 6 : 0), '0', STR_PAD_LEFT) . str_pad($var2, (!empty($var2) ? 6 : 0), '0', STR_PAD_LEFT); 

$var1 = "ok"; 
$var2 = ""; 
// $var2 excluded 
// 0000ok 
0

您可以使用三元形式。 (條件)? (真正的返回值):(假返回值),稍微清理代碼。所以,你的代碼就變成了:

$test1 = ($var ? str_pad($var, 6, '0', STR_PAD_LEFT) : ''); 
$test1 .= ($var2 ? str_pad($var2, 6, '0', STR_PAD_LEFT) : ''); 
echo $test1; 
0
echo str_pad($var ?: '', 6, '0', STR_PAD_LEFT) 
    . str_pad($var2 ?: '', 6, '0', STR_PAD_LEFT); 

的作品?