enigmaticus
enigmaticus

Reputation: 548

php split integer into smaller parts

i'm working on a project that will need to have everything shown with barcodes, so I've generated 7 numbers for EAN8 algorithm and now have to get these 7 numbers seperately, right now i'm using for the generation

$codeint = mt_rand(1000000, 9999999);

and I need to get this 7 numbers each seperately so I can calculate the checksum for EAN8, how can i split this integer to 7 parts, for example

12345678 to 
arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]=5
arr[5]=6
arr[6]=7

any help would be appreciated..

also I think that I'm becoming crazy :D because I already tried most of the solutions you gave me here before and something is not working like it should work, for example:

$codeint = mt_rand(1000000, 9999999);
echo $codeint."c</br>";
echo $codeint[1];
echo $codeint[2];
echo $codeint[3];

gives me :

9082573c
empty row
empty row
empty row


solved! $codeint = (string)(mt_rand(1000000, 9999999));

Upvotes: 0

Views: 9779

Answers (5)

Robert
Robert

Reputation: 20286

You can divide them in loop by 10:

12345678 is 8*10^1 + 7*10^2 + 6*10^3... 

The other option is cast it to a char array and then just get it as a char.

Upvotes: 1

Kevin_cl
Kevin_cl

Reputation: 369

okay what you can do is

Type cast to string with prefill 0

this is how it works

$sinteger =  (string)$integer;
$arrsize = 0 ; 
    for (i=strlen($sinteger), i == 0 ; i--)
    {
    arr[$arrsize]=$sinteger[i];
    $arrsize++;
    } 

And then what is left you can prefill with zip. I am sure you can manage the order reverse or previous. but this is simple approach.

Upvotes: -1

Smile
Smile

Reputation: 2758

Edit

After @HamZa DzCyberDeV suggestion

$string = '12345678'; 
echo "<pre>"; print_r (str_split($string));

But in mind it comes like below but your suggestion is better one.


If you're getting string from your function then you can use below one

$string = '12345678'; 
$arr = explode(",", chunk_split($string, 1, ','));
$len = count($arr);
unset($arr[$len-1]);
echo "<pre>";
print_r($arr);

and output is

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)

Upvotes: 0

Damien Overeem
Damien Overeem

Reputation: 4529

Try to use str_split() function:

$var = 1234567;
print_r(str_split($var));

Result:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)

Upvotes: 6

Gian
Gian

Reputation: 13945

There are two ways to do this, one of which is reasonably unique to PHP:

1) In PHP, you can treat an integer value as a string and then index into the individual digits:

$digits = "$codeint";
// access a digit using intval($digits[3])

2) However, the much more elegant way is to use actual integer division and a little knowledge about mathematical identities of digits, namely in a number 123, each place value is composed of ascending powers of 10, i.e.: 1 * 10^2 + 2 * 10^1 + 3 * 10^0.

Consequently, dividing by powers of 10 will permit you to access each digit in turn.

Upvotes: 2

Related Questions