make int(1)和int(2)成为int(12)

时间:2011-04-13 05:47:59

标签: php string integer

我正在尝试使用ord()手动将字符串转换为整数,而不是自动转换为(int),intval()或settype()。还有其他手动转换字符串的方法吗?

<?php
function first($string){
  for($i=0; $i!=strlen($string); $i++){
  if(ord($string[$i])===46){
    $stop=true;
  }
  if(!isset($stop)){
    $n=ord($string[$i]);
    if($n===48){$n=0;}
    elseif($n===49){$n=1;}
    elseif($n===50){$n=2;}
    elseif($n===51){$n=3;}
    elseif($n===52){$n=4;}
    elseif($n===53){$n=5;}
    elseif($n===54){$n=6;}
    elseif($n===55){$n=7;}
    elseif($n===56){$n=8;}
    elseif($n===57){$n=9;}
    else{ $n=0;}
    var_dump($n);
  }
}
}
first("12"); // result = int(1) int(2), what i want is int(12)
?>

4 个答案:

答案 0 :(得分:3)

示例#1:

function first($string){
  return $string * 1;
  }

示例#2(计算数字的ASCII值):

function first($string){
  $res = 0;
  $arr = array_reverse(str_split($string, 1));
  $mult = 1; 
  foreach($arr as $digit) {
    if (ord($digit) > 47 && ord($digit) < 58) {
      $res += (ord($digit) - 48) * $mult;
      $mult *= 10;
      }
    elseif($digit == '-') $res *= -1;
    elseif($digit != '+') {
      $res = 0;
      $mult = 1;
      }
    }  
  return $res;
  }

用法:

var_dump(first('-123.534')); // -123
var_dump(first('-1.3'));     // -1
var_dump(first('-777'));     // -777
var_dump(first('12334'));    // 12345
var_dump(first('5.53'));     // 5
var_dump(first('+64.02'));   // 64

答案 1 :(得分:1)

你能解释一下你为什么要这样做吗?家庭作业?有很多方法可以做到这一点,我想不出比你更复杂(和慢)的东西。尝试其中之一:

function first($string) {
    return (int)$string;
}

function first($string) {
    return intval($string);
}

function first($string) {
    return $string * 1;
}

function first($string) {
    return $string + 0;
}

...

编辑:重新阅读您的问题,似乎可能有一个或多个.(ASCII代码46)在输入字符串中不是小数点而您想查找将“第一”部分作为int。在这种情况下,只需执行:

function first($string) {
    return (int)array_shift(explode('.',$string));
}

答案 2 :(得分:1)

您应该使用与$sum分开的$n变量。

if()阻止之前添加:

$sum = $sum * 10;

而不是var_dump($n);累积中间结果:

$sum += $n;

然后在您的函数中添加var_dump($sum);作为最后一件事 iffor阻止之后。

答案 3 :(得分:1)

我不知道为什么你会想要这个,但这里有一个例子,你可以做到这一点。

<?php
function first($string){
  $n = 0;
  for($i=0; $i!=strlen($string); $i++){
    $n *= 10;
    $o=ord($string[$i]);
    if ($o >= 48 && $o <= 57) {
      $n += $o - 48;
    }
  }
  var_dump($n);
  return $n;
}
?>