将数字分成两半但在下半场以0开始时固定

时间:2015-02-16 16:12:32

标签: php regex

我有很多想要分成两半的人。对于此示例,请使用:5639445604728832

当它被分成两半时,就会出现这样的结果:

56394456
04728832

显然,第二个数字不再是一个数字。

我有以下代码,但我试图将其设置为将0添加到第一个数字的末尾,直到第二个数字正式为实数。谁能帮我解决这个问题?

function my_number_split($number)
{
    $half = (int) ( (strlen($number) / 2) ); // cast to int incase str length is odd
    $left = substr($number, 0, $half);
    $right = substr($number, $half);

    echo $left."<br />".$right;
}

3 个答案:

答案 0 :(得分:1)

像这样重写你的功能就可以了。

function my_number_split($number)
{
    $half = ceil( (strlen($number) / 2) ); 
    while (0 == substr($number, $half, 1) && $half <= strlen($number) ) $half++;
    $left = substr($number, 0, $half);
    $right = substr($number, $half);

    echo $left."<br />".$right;
}

答案 1 :(得分:0)

简单的循环应该这样做 像这样的东西 -

function my_number_split($number)
{
    /* Logic to traverse ahead till a 0 is not found. */
    $str_len = strlen($number);
    $half_index = $str_len/2;
    while($half_index < $str_len){
        if($number[$half_index] != "0"){
            break;
        }
        $half_index++;
    }
    //Slicing string.
    $left = substr($number, 0, $half_index);
    $right = substr($number, $half_index);
    echo $left."<br />".$right;
}
my_number_split("5639445604728832");

/*
OUTPUT -
563944560
4728832
*/

答案 2 :(得分:0)

这可能是一种效率低下的方式,但对于挑战:

if (preg_match('~\A(?<n1>.?(?:.(?=.*(.(?(2)\2)\z)))+0*)(?<n2>.+)~', $number, $m))
    echo $m['n1'] . "\n" . $m['n2'];