web-dev-qa-db-fra.com

PHP - Obtenir la longueur des chiffres dans un nombre

Je voudrais demander comment je peux obtenir la longueur des chiffres dans un entier. Par exemple:

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

$numlength devrait être 6 dans cet exemple. D'une manière ou d'une autre je n'arrive pas à le faire fonctionner?

Merci

EDIT: L'exemple de code ci-dessus - ^ et sa méthode respective mb_strlen(); fonctionnent parfaitement.

13
supersize

Peut être:

$num = 245354;
$numlength = strlen((string)$num);
30
Sergei Gorjunov

Un peu de maths aide parfois. Tout ce dont vous avez besoin est d'invoquer floor(log10($num) + 1) avec le contrôle de 0. 

$num = 12357;
echo $num !== 0 ? floor(log10($num) + 1) : 1;

Fondamentalement, il fait le logarithme avec la base 10, puis en fait le plancher et ajoute 1. 

5
Robert

Manière plus élégante :) 

ceil(log10($num));
1
Halayem Anis

Vous pouvez également utiliser des mathématiques de 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";
1
Carlos Vergara

Les fonctions suivantes fonctionnent pour les entiers ou les flottants (lisez les commentaires pour plus d’informations):

/* Counts digits of a number, even floats.
 * $number: The number.
 * $dec: Determines counting digits:
 * 0: Without decimal
 * 1: Only decimal
 * 2: With decimal (i.e. all parts)
 */

// PHP5
function digits_count($number, $dec = 0) {
    $number = abs($number);
    $numberParts = explode(".", $number);
    if (!isset($numberParts[1]))
        $numberParts[1] = 0;
    return ($dec == 1 ? 0 : strlen($numberParts[0])) +
        ($dec == 0 ? 0 : strlen($numberParts[1]));
}

// PHP7
function digits_count($number, int $dec = 0) : int {
    $number = abs($number);
    $numberParts = explode(".", $number);
    return ($dec == 1 ? 0 : strlen($numberParts[0])) +
        ($dec == 0 ? 0 : strlen($numberParts[1] ?? 0));
}

Je vous recommande d'utiliser PHP7, c'est plus court et plus propre.

J'espère que ça aide!

0
MAChitgarha

Utiliser seulement une version de (int)(log($num,10)+1) échoue pour 10, 100, 1000, etc. Il compte le nombre 10 comme un chiffre, 100 comme deux chiffres, etc. Il échoue également avec 0 ou un nombre négatif .
Si vous devez utiliser les mathématiques (et que le nombre est non négatif), utilisez:
$numlength = (int)(log($num+1, 10)+1);

Ou pour une solution mathématique qui compte les chiffres sous forme de nombres OR négatifs:
$numlength = ($num>=0) ? (int)(log($num+1, 10)+1) : (int)(log(1-$num, 10)+1);

Mais la solution strlen est à peu près aussi rapide en PHP.

0
Jamie Ciocco