2015-02-10 14 views
6

Vorrei chiedere come ottenere la lunghezza delle cifre in un numero intero. Ad esempio:PHP - Ottieni la lunghezza delle cifre in un numero

$num = 245354; 
$numlength = mb_strlen($num); 

$numlength dovrebbe essere 6 in questo esempio. In qualche modo non riesco a farlo funzionare?

Grazie

EDIT: Il codice di esempio sopra -^e il relativo metodo mb_strlen(); funziona bene.

+1

Come funziona? Che risultati ottieni? –

+1

Invece di dare molte soluzioni, qualcuno ha un'idea di "Perché questo codice non funziona?". Perché il codice dovrebbe funzionare. – Debflav

+0

Il codice pubblicato [funziona] (http://3v4l.org/3mOsS) come un incantesimo! – axiac

risposta

21

Forse:

modo
$num = 245354; 
$numlength = strlen((string)$num); 
+0

cheers mate, sta funzionando bene! – supersize

+1

soluzione migliore è usare log() quindi non è necessario eseguire il cast in stringa. – Robert

+0

L'uso di funzioni matematiche come 'log()' è illeggibile per me. Credo che il programmatore! = Matematico – evilReiko

1

più elegante :)

ceil(log10($num)); 
+0

'$ num = 10;' e non funzionerà :) – Robert

1

Si potrebbe anche usare un po 'di matematica di base!

$digits = (int)(log($num,10)+1) 

<?php 
    $num = 123; 
    $num2 = 1234; 
    $num3 = 12345; 

    function digits($num){ 
    return (int) (log($num, 10) + 1); 
    } 

    echo "\n $num: " . digits($num); // 123: 3 
    echo "\n $num2:" . digits($num2); // 1234: 4 
    echo "\n $num3:" . digits($num3); // 12345: 5 
    echo "\n"; 
3

Alcuni calcoli a volte aiutano.

$base = 10; 
$num = 12357; 
echo floor(log($num, $base) + 1); 

$ base è il sistema di numerazione di base si può contare la lunghezza di qualsiasi sistema, ad esempio binario o esadecimale semplicemente qualche modifica di $ di base.

È inoltre possibile utilizzare la funzione log10()

0

Usando solo qualche versione di (int)(log($num,10)+1) non riesce per 10, 100, 1000, etc. Conta il numero 10 come 1 cifra, 100 in due cifre, etc. Inoltre, non con 0 o qualsiasi numero negativo.
Se è necessario utilizzare la matematica (e il numero è non negativo), utilizzare:
$numlength = (int)(log($num+1, 10)+1);

O per una soluzione di matematica che conta le cifre in numeri positivi o negativi:
$numlength = ($num>=0) ? (int)(log($num+1, 10)+1) : (int)(log(1-$num, 10)+1);

Ma la soluzione strlen è più veloce di PHP.