我想将前导零添加到变量中以获取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);
丑陋?
答案 0 :(得分: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
)。我绝对不会建议尝试使代码略微缩短,但代价是更难以阅读。
如果您要处理未知或已知但数量众多的变量,那么将会有更好的解决方案。但只有两个,像这样的硬编码很好。
答案 1 :(得分: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
答案 2 :(得分:0)
您可以使用三元形式。 (条件)? (true返回值):( false返回值),稍微清理代码。所以你的代码变成了:
$test1 = ($var ? str_pad( $var, 6, '0', STR_PAD_LEFT ) : '');
$test1 .= ($var2 ? str_pad( $var2, 6, '0', STR_PAD_LEFT ) : '');
echo $test1;
答案 3 :(得分:0)
echo str_pad( $var ?: '', 6, '0', STR_PAD_LEFT )
. str_pad( $var2 ?: '', 6, '0', STR_PAD_LEFT );
作品?