# How to Get the First Digit of an Integer in PHP?

In PHP, you can get the first digit of an integer in the following ways:

## Using Regular Expression

You can use regular expression in the following way to get the first digit of an integer:

1. Use `preg_match()` method with the `\d` (or `[0-9]`) pattern to get the first digit;
2. Convert numeric string back to integer;
3. Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

```function firstDigit(int \$num): int
{
// 1: get first digit using regex pattern
preg_match('/\d/', \$num, \$matches);
// 2: convert matched item to integer
\$digit = (int) \$matches[0];
// 3: add sign back as needed
return (\$num < 0) ? -\$digit : \$digit;
}

var_dump(firstDigit(1234)); // 1
var_dump(firstDigit(-1234)); // -1
var_dump(firstDigit(0)); // 0
var_dump(firstDigit(-0)); // 0
```

## Using `intdiv()`

The following formula would give you the first digit of an integer:

```quotient = intdiv(integer, integerLength - 1)
```

You can implement it in the following steps:

1. Convert integer in absolute form to string and get length of the integer to determine the divisor;
2. Get the integer part from result of the division (using `intdiv()`).

For example, you can implement this like so:

```// PHP 7+
function firstDigit(int \$num): int
{
// 1: convert absolute form to string and get length of integer
\$len = strlen((string) abs(\$num));
\$divisor = 10 ** (\$len - 1);
// 2: get integer part from result of division
return intdiv(\$num, \$divisor);
}

var_dump(firstDigit(1234)); // 1
var_dump(firstDigit(-1234)); // -1
var_dump(firstDigit(0)); // 0
var_dump(firstDigit(-0)); // 0
```

This works in the following way:

```// num = -1234

// len = 4
// divisor = 10 ^ (4 - 1) = 1000

// quotient = trunc(-1234 / 1000)
// quotient = trunc(-1.234)
// quotient = -1
```

## Using Floored Division

The following formula would give you the first digit of an integer:

```quotient = floor(abs(integer) / integerLength - 1)
```

You can implement it in the following steps:

1. Convert integer to absolute form;
2. Get length of the integer to determine the divisor;
3. Get the integer part from result of the division;
4. Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

```function firstDigit(int \$num): int
{
// 1: convert to absolute form
\$dividend = abs(\$num);
// 2: get length of integer and determine divisor
\$len = strlen((string) \$dividend);
\$divisor = 10 ** (\$len - 1);
// 3: get integer part from result of division
\$quotient = floor(\$dividend / \$divisor);
// 4: add sign back as needed
return (\$num < 0) ? -\$quotient : \$quotient;
}

var_dump(firstDigit(1234)); // 1
var_dump(firstDigit(-1234)); // -1
var_dump(firstDigit(0)); // 0
var_dump(firstDigit(-0)); // 0
```

Since the dividend is in absolute form, `floor()` function works (similar to using `intdiv()`) for both, positive and negative, integers.

This works in the following way:

```// num = -1234

// dividend = 1234
// len = 4
// divisor = 10 ^ (4 - 1) = 1000

// quotient = floor(1234 / 1000)
// quotient = floor(1.234)
// quotient = 1

// result = -1
```

## Reducing to Single Digit

You can loop over the number and reduce it in each iteration till only a single digit (i.e. digit less than `10`) is left. This can be done in the following steps:

1. Convert integer to absolute form;
2. Reduce number to single digit:
• If integer is greater than `10`, then keep dividing the number by `10` till a number less than `10` is left, or;
• If integer is less than `10`, then return it as is as it's already a single digit number.
3. Get the integer part of the resulting decimal number;
4. Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

```function firstDigit(int \$num): int
{
// 1: convert to absolute form
\$absNum = abs(\$num);
// 2: reduce number to single digit
while (\$absNum >= 10) {
\$absNum /= 10;
}
// 3: get integer part of decimal number
// 4: add sign back as needed
return (int) ((\$num < 0) ? -\$absNum : \$absNum);
}

var_dump(firstDigit(1234)); // 1
var_dump(firstDigit(-1234)); // -1
var_dump(firstDigit(0)); // 0
var_dump(firstDigit(-0)); // 0
```

Since the dividend is in absolute form, you can also use the `floor()` function to achieve the same (instead of using `intval()` or casting to integer).

## Converting to String and Retrieving First Character

You can convert the integer to string and get the first digit in the following steps:

1. Convert integer in absolute form to string;
2. Get the first character;
3. Convert the numeric character back to integer;
4. Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

```function firstDigit(int \$num): int
{
// 1: convert absolute form to string
\$numStr = (string) abs(\$num);
// 2: get first character
\$firstChar = \$numStr[0];
// 3: convert back to integer
\$firstDigitUnsigned = (int) \$firstChar;
// 4: add sign back as needed
return (\$num < 0) ? -\$firstDigitUnsigned : \$firstDigitUnsigned;
}

var_dump(firstDigit(1234)); // 1
var_dump(firstDigit(-1234)); // -1
var_dump(firstDigit(0)); // 0
var_dump(firstDigit(-0)); // 0
```

This post was published (and was last revised ) by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.