我有很多想要分成两半的人。对于此示例,请使用: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;
}
答案 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'];