php将整数拆分成更小的部分

时间:2013-05-08 07:06:53

标签: php barcode

我正在开发一个需要用条形码显示所有东西的项目,所以我为EAN8算法生成了7个数字,现在必须分别得到这7个数字,现在我用于生成< / p>

$codeint = mt_rand(1000000, 9999999);

我需要分别得到这7个数字所以我可以计算EAN8的校验和,如何将这个整数分成7个部分,例如

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

任何帮助将不胜感激..

我也觉得我变得疯狂了:D因为我已经尝试过你之前给我的大部分解决方案,而且有些东西不能正常工作,例如:

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

给了我:

9082573c
empty row
empty row
empty row


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

5 个答案:

答案 0 :(得分:4)

尝试使用str_split()功能:

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

结果:

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

答案 1 :(得分:2)

有两种方法可以做到这一点,其中一种方法对PHP来说是相当独特的:

1)在PHP中,您可以将整数值视为字符串,然后将索引编入各个数字:

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

2)然而,更优雅的方式是使用实际整数除法和关于数字的数学恒等知识,即在数字123中,每个地方值由10的递增幂组成,即:1 * 10^2 + 2 * 10^1 + 3 * 10^0

因此,除以10的幂将允许您依次访问每个数字。

答案 2 :(得分:1)

它是基本数学,你可以将它们循环除以10

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

另一个选项是将它转换为char数组,然后将其作为char

答案 3 :(得分:0)

修改

在@HamZa DzCyber​​DeV建议之后

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

但是请记住它如下所示,但你的建议更好。


如果您从函数中获取字符串,则可以使用下面的

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

,输出

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

答案 4 :(得分:-1)

好的,你可以做的是

使用预填充0键入强制转换为字符串

这是它的工作原理

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

然后剩下的就是拉链预装。 我相信你可以管理逆转或之前的订单。但这是一种简单的方法。