我想将前导零添加到变量中,以获得一个6位数的字符串。我使用这个代码
echo str_pad( $var, 6, '0', STR_PAD_LEFT ) . str_pad( $var2, 6, '0', STR_PAD_LEFT );
这没关系,但如果$var或$var2为空,则结果为000000
如果$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;
我只是想知道代码是干净还是简单。
谢谢。
编辑:我尝试了另一种解决方案:
function addZero( $number, $length ){
if( !$number ){ return false; }
return str_pad( $number, $length, '0', STR_PAD_LEFT);
}
只有
echo addZero( $var, 6) . addZero( $var2, 5);
丑吗?
好吧,你可以这样做:
$result = "";
$result .= $var ? str_pad( $var, 6, '0', STR_PAD_LEFT ) : null;
$result .= $var2 ? str_pad( $var2, 6, '0', STR_PAD_LEFT ) : null;
这实际上是同一件事,只是写得更紧凑一点(它确实确保了$result
总是被定义的)。我绝对不建议以让代码变得更难阅读为代价来缩短代码。
如果你有一个未知或已知但大量的变量要处理,那么就会有更好的解决方案。但对于两个人来说,像这样的硬编码是可以的。
您可以使用三元形式。(条件)?(true返回值):(false返回值),稍微清理一下代码。所以你的代码变成:
$test1 = ($var ? str_pad( $var, 6, '0', STR_PAD_LEFT ) : '');
$test1 .= ($var2 ? str_pad( $var2, 6, '0', STR_PAD_LEFT ) : '');
echo $test1;
echo str_pad( $var ?: '', 6, '0', STR_PAD_LEFT )
. str_pad( $var2 ?: '', 6, '0', STR_PAD_LEFT );
工作?
如果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