仅当php存在时才添加前导零


Add leading zero only if exist with php

我想将前导零添加到变量中,以获得一个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