Добавлять начальный ноль, только если существует с php - PullRequest
1 голос
/ 21 марта 2012

Я хочу добавить начальный ноль к переменной, чтобы получить строку из 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);

Гадкий?

Ответы [ 4 ]

1 голос
/ 21 марта 2012

Ну, вы могли бы сделать это:

$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 голосов
/ 21 марта 2012
echo str_pad( $var  ?: '', 6, '0', STR_PAD_LEFT ) 
   . str_pad( $var2 ?: '', 6, '0', STR_PAD_LEFT );

работает

0 голосов
/ 21 марта 2012

Вы можете использовать троичную форму. (состояние) ? (истинное возвращаемое значение): (ложное возвращаемое значение), что немного очищает код. Таким образом, ваш код становится:

$test1 = ($var ? str_pad( $var, 6, '0', STR_PAD_LEFT ) : '');
$test1 .= ($var2 ? str_pad( $var2, 6, '0', STR_PAD_LEFT ) : '');
echo $test1;
0 голосов
/ 21 марта 2012

Вы можете втиснуть троичную операцию в вызовы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...