2012-03-21 46 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); 

的作品?