0

4 桁の数字を 4 桁の 10 進数で分割したい。
入力:

Input 1 : 5546.263 
Input 2 : 03739.712  /*(some time may have one zero at first)*/

結果: (配列)

Result of input 1 :  0 => 55 , 1 => 46.263
Result of input 2 :  0 => 37 , 1 => 39.712

PS: 入力は GPS データで、常に数字として 4 桁 / 10 進数として 3 桁で、最初はゼロの場合もあります。

4

2 に答える 2

2

次の関数を使用できます。

function splitNum($num) {
    $num = ltrim($num, '0');
    $part1 = substr($num, 0, 2);
    $part2 = substr($num, 2);
    return array($part1, $part2);
}

テスト ケース 1:

print_r( splitNum('5546.263') );

出力:

Array
(
    [0] => 55
    [1] => 46.263
)

テスト ケース 2:

print_r( splitNum('03739.712') );

出力:

Array
(
    [0] => 37
    [1] => 39.712
)

デモ!

于 2013-10-18T19:06:13.977 に答える
1

^0*([0-9]{2})([0-9\.]+)うまく動作し、あなたが望むことをする必要があります:

$input = '03739.712';

if (preg_match('/^0*([0-9]{2})([0-9\.]+)/', $input, $matches)) {
    $result = array((int)$matches[1], (float)$matches[2]);
}

var_dump($result); //array(2) { [0]=> int(37) [1]=> float(39.712) }

正規表現の剖検:

  • ^- 文字列はここから開始する必要があります
  • 0*- 文字「0」が 0 回以上繰り返される
  • ([0-9]{2})- 正確に 2 回繰り返される 0 から 9 までの数字に一致するキャプチャ グループ
  • ([0-9\.]+)- 0 から 9 までの数字または 1 回以上繰り返されるピリオドに一致するキャプチャ グループ

$必要に応じて、「文字列はここで終了する必要がある」ことを指定するために最後に追加できます

: 最初のマッチで anintにキャストするので、この部分は省略できますが、0*キャストしない場合はそのままにしておいてください。

于 2013-10-18T19:06:47.870 に答える