Как префикс положительного числа с знаком плюса в PHP

Мне нужно создать функцию, чтобы возвращать отрицательные числа без изменений, но должен добавить знак + в начале номера, если его уже нет.

Пример:

 Input Output ---------------- +1 +1 1 +1 -1 -1 

Он получит только числовой ввод.

 function formatNum($num) { # something here..perhaps a regex? } 

Эта функция будет вызываться несколько раз в режиме echo/print поэтому чем быстрее, тем лучше.

Обновить:

Спасибо всем за ответы. Я должен сказать, что решение на основе sprintf действительно быстро.

Вы можете использовать регулярное выражение как:

 function formatNum($num){ return preg_replace('/^(\d+)$/',"+$1",$num); } 

Но я бы предложил не использовать regex для такой тривиальной вещи. Лучше использовать sprintf здесь как:

 function formatNum($num){ return sprintf("%+d",$num); } 

Из руководства PHP для sprintf :

Необязательный спецификатор знака, который заставляет знак (- или +) использоваться для числа. По умолчанию для числа используется только знак -, если он отрицательный. Этот спецификатор заставляет положительные числа иметь прикрепленный знак + , и был добавлен в PHP 4.3.0.

 function formatNum($num) { return ($num>0)?'+'.$num:$num; } 
 function formatNum($num) { $num = (int) $num; // or (float) if you'd rather return (($num >= 0) ? '+' : '') . $num; // implicit cast back to string } 

Решение sprintf предоставленное @unicornaddict, очень приятно и, вероятно, самый элегантный способ. Просто подумал, что я дам альтернативу. Не уверен, как они измеряют скорость.

 // Non float safe version function formatNum($num) { return (abs($num) == $num ? '+' : '') . intval($num); } // Float safe version function formatNum($num) { return (abs($num) == $num ? '+' : '') . (intval($num) == $num ? intval($num) : floatval($num)); } // Float safe version, alternative function formatNum($num) { return (abs($num) == $num ? '+' : '') // Add '1' to $num to implicitly cast it to a number . (is_float($num + 1) ? floatval($num) : intval($num)); } 

Простым решением является использование спецификатора формата в функции printf ().

Например,

 $num1=2; $num2=-2; printf("%+d",$num1); echo '<br>'; printf("%+d",$num2); 

дает результат

 +2 -2 

В твоем случае

  function formatNum($num){ return printf("%+d",$num); }