我正在尝试使用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)
?>
答案 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);
作为最后一件事。 在 if
和for
阻止之后。
答案 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;
}
?>