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

php将整数分割成更小的部分,php,barcode,Php,Barcode,我正在做一个项目,需要用条形码显示所有内容,所以我为EAN8算法生成了7个数字,现在必须分别获得这7个数字,现在我正在使用这7个数字进行生成 $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 任何帮助都将不胜感激 另外,我

我正在做一个项目,需要用条形码显示所有内容,所以我为EAN8算法生成了7个数字,现在必须分别获得这7个数字,现在我正在使用这7个数字进行生成

$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];

这是基本的数学,你可以把它们循环除以10

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

另一个选项是将其强制转换为char数组,然后将其作为char获取。请尝试使用函数:

$var = 1234567;
print_r(str_split($var));
结果:

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

有两种方法可以做到这一点,其中一种是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的幂将允许您依次访问每个数字。

好的,您可以做的是

类型转换为字符串,前缀为0

这就是它的工作原理

$sinteger =  (string)$integer;
$arrsize = 0 ; 
    for (i=strlen($sinteger), i == 0 ; i--)
    {
    arr[$arrsize]=$sinteger[i];
    $arrsize++;
    } 
然后剩下的东西可以用zip进行预填充。 我相信您可以管理反向或以前的订单。但这是一个简单的方法

编辑

在@HamZa DzCyberDeV建议之后

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

如果
mt_rand()
返回1或小于7位的整数?是否足够?您可以直接访问$codeint[0]、$codeint[1],而无需任何额外的努力。刚刚更改为mt_rand:)第一个仅用于测试。如果变量是字符串或整数,则可以使用其位置$number[0]=字符串中的第一个符号、$number[1]秒等逐个访问其字段。很好,+1,可能对字符串进行强制转换也会奏效,
(string)$codeint
。PHP什么时候进行了正确的强制转换?我已经有一段时间没有接触过它了:在这种情况下,pperphaps太复杂了,但我确实喜欢数学解:)+1
$codeint=(string)intval(sprintf(“%0d”,mt_rand(19999999))
then
echo$codeint[0]。如果OP想要将数字的拼接作为整数使用,那么他可以像
echo(int)$codeint[0]一样将其回滚。我以前尝试过类似的方法,现在我更新了问题,有些方法不正常:/检查其他答案,如果将其转换为字符串,则可以访问类似于java的字符的单个字符,但类似于php中的数组。@CORRUPT no不是
len
应该是
strlen
,在PHP中,我们不必“强制”字符串
$sinteger=(string)$integer,PHP为我们做这件事,
arr[$arrsize]=$sinteger[i]应该是
$arr[$arrsize]=$sinteger[$i]
…@HamZaDzCyberDeV:很高兴指出这一点。但是
str_split()
并没有首先出现在脑海中,所以不同的场景就消失了我现在更新了问题,有些东西没有正常工作:/i现在更新了问题,有些东西没有正常工作:/i现在更新了问题,有些东西没有正常工作:/
$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
)