2009-12-04 10 views

Respuesta

23

Supongo que la entrada es una cadena?

$str = "01"; 
$anInt = intval($str); 

Usted puede pensar que el 0 significaría esto se interpreta como octal, como en muchos otros idiomas/API. Sin embargo, el segundo argumento para intval es una base. El valor predeterminado para esto es 10. Esto significa 09-> 9. Vea el primer comentario en la página intval, que establece que la deducción básica que podría esperar solo ocurrirá si pasa 0 en la base.

+0

Si la entrada se trata como un int, se manejará como octal. (entonces 09-> 0) – erenon

+0

@erenon, mira mi actualización. –

+0

Do '(int) $ str;' en su lugar. Es hasta 4 veces más rápido que 'intval()'. –

0
$str = "05"; 
$last = $str[1]; 
+0

la solución intval() es más confiable en este caso, ya que también puede detectar "009". –

+0

cierto. Pero mi solución es más rápida, y el TS no dijo nada sobre el 009 :-) – Fortega

1
$old_nums = array("01","02","03"); 

foreach($old_nums as $k => $v) { 

ltrim($v,"0"); 

} 
+0

que es excesivo –

+0

Eso depende completamente de dónde vienen los números y cómo están almacenados, ¿no es así? En este caso, ofrecí esto solo como una alternativa a la respuesta de Doug T., ya presentada y claramente precisa y eficiente. –

0
$i = substr($input, 1, 1); 
1
$x="01"; 
$x=+$x; 

$x="02"; 
$x=+$x; 

... 

o

$x=+"01"; 

debería funcionar tanto para int, y la cadena

0

Si desea utilizar la solución de expresiones regulares genérica: 's/[0] ([0-9])/\ 1 /'(ADD en los anclajes según el caso)

0
$str='05'; 

if(strpos($str,'0')==0 && strpos($str,'0') != false){ 
$new = intval(substr($str,1)); 
} 
0

Haz (int)$str; lugar. Es hasta 4 veces más rápido que intval().

Cuestiones relacionadas