2009-12-04 8 views

risposta

23

Suppongo che l'input sia una stringa?

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

Si può pensare che lo 0 significherebbe questo viene interpretato come ottale, come in molte altre lingue/API. Tuttavia il secondo argomento di intval è una base. Il valore predefinito per questo è 10. Ciò significa che 09-> 9. Vedere il primo commento alla pagina intval, in cui si afferma che la detrazione di base che si potrebbe prevedere si verifica solo se si passa 0 come base.

+0

Se l'input viene considerato come int, verrà gestito come ottale. (così 09-> 0) – erenon

+0

@erenon, vedere il mio aggiornamento. –

+0

Do '(int) $ str;' invece. È fino a 4x più veloce di 'intval()'. –

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

la soluzione intval() è più affidabile in questo caso, in quanto può catturare anche "009". –

+0

vero. Ma la mia soluzione è più veloce, e il TS non ha detto nulla sul 009 :-) – Fortega

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

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

ltrim($v,"0"); 

} 
+0

che è eccessivo –

+0

Questo dipende interamente da dove i numeri provengono, e come sono memorizzati, non è vero? In questo caso l'ho proposto solo come alternativa alla risposta di Doug T., già presentata e chiaramente precisa ed efficiente. –

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

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

... 

o

$x=+"01"; 

dovrebbe funzionare sia per int, e la stringa

0

Se si desidera utilizzare la soluzione generica espressione regolare: 's/[0] ([0-9])/\ 1 /'(aggiungere in ancoraggi a seconda dei casi)

0
$str='05'; 

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

fare (int)$str; invece. È fino a 4x più veloce di intval().

Problemi correlati