问题描述
|
我正在尝试使用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)
?>
解决方法
范例1:
function first($string){
return $string * 1;
}
Example#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
,您应使用与$n
分开的$sum
变量。
在您的“ 6”字块之前添加:
$sum = $sum * 10;
而不是var_dump($n);
在那里累积中期结果:
$sum += $n;
然后添加var_dump($sum);
作为函数中的最后一项。在if
和for
块之后。
,我不知道您为什么要这样做,但是这里有一个示例,您可以怎么做。
<?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;
}
?>
,您能解释一下为什么要这样做吗?家庭作业?有很多方法可以做到这一点,而且我想不出比您更复杂(又慢)的方法。尝试以下方法之一:
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)在您的输入字符串中不是小数点,并且您想找出\“ first \”部分作为一个整数。在这种情况下,只需执行以下操作:
function first($string) {
return (int)array_shift(explode(\'.\',$string));
}