0

如何在 PHP 中将字符串数据“VAL001”拆分为“VAL”和“001”两列。

4

5 回答 5

0

上述解决方案的基准测试为 100000 次迭代。

Intel(R) Core(TM) i5-2435M CPU @ 2.40GHz

<?php
function getParts($str){
    $pieces = preg_split("/[A-Z]+/", $str);
    $number = $pieces[1];
    $pieces = preg_split("/[0-9]+/", $str);
    $string = $pieces[0];   
    return array('number' => $number, 'string' => $string);
}

$string = 'VAL001';

$start = microtime(true);
for($cou=0;$cou<100000;$cou++){
    $ret = getParts($string);
}
$end = microtime(true);
echo 'time taken : ' .  sprintf('%f', $end - $start);
echo "\n";


$start = microtime(true);
for($cou=0;$cou<100000;$cou++){
    list($val, $num) = str_split($string, 3);
}
$end = microtime(true);
echo 'time taken : ' .  sprintf('%f', $end - $start);
echo "\n";


$start = microtime(true);
for($cou=0;$cou<100000;$cou++){
    $val1 = substr( $var, 0,3);
    $val2 = substr( $var, 3,3);
}
echo 'time taken : ' .  sprintf('%f', $end - $start);
echo "\n";
?>

输出

第一次运行

time taken : 2.269323
time taken : 0.586926
time taken : -0.000081

第二轮

time taken : 2.205317
time taken : 0.555085
time taken : -0.000073
于 2012-09-27T03:48:42.853 回答
0
$var = 'VAL001';
$val1 = substr( $var, 0,3);
$val2 = substr( $var, 3,3);

echo $val1." ".$val2;
于 2012-09-27T02:18:59.607 回答
0

这里有几个选项,但您很快就会注意到,我们需要比 Numeric 和 String 更多的条件,因为一个不排除另一个,一些字符串是数字,所有数字都可以是字符串。

preg_match()

substr()

于 2012-09-27T02:19:19.647 回答
0
<?php
function getParts($str){
    $pieces = preg_split("/[A-Z]+/", $str);
    $number = $pieces[1];
    $pieces = preg_split("/[0-9]+/", $str);
    $string = $pieces[0];   
    return array('number' => $number, 'string' => $string);
}
$str1 = 'VAL001';
$str2 = 'NEWVAL0001';

$ret1 = getParts($str1);
var_dump($ret1);
$ret2 = getParts($str2);
var_dump($ret2);
?>

输出

array(2) {
  ["number"]=>
  string(3) "001"
  ["string"]=>
  string(3) "VAL"
}
array(2) {
  ["number"]=>
  string(4) "0001"
  ["string"]=>
  string(6) "NEWVAL"
}
于 2012-09-27T02:19:21.963 回答
0

很大程度上取决于你需要什么。我会给你一个还没有人知道的答案:str_split

list($val, $num) = str_split($string, 3);
于 2012-09-27T02:20:52.320 回答