繁体   English   中英

PHP将整数拆分为较小的部分

[英]php split integer into smaller parts

我正在开发一个项目,该项目需要用条形码显示所有内容,因此我已经为EAN8算法生成了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];

给我 :

9082573c
empty row
empty row
empty row


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

尝试使用str_split()函数:

$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的幂将允许您依次访问每个数字。

这是基本的数学运算,您可以将它们按循环除以10

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

另一个选项将其强制转换为char数组,然后将其作为char获得

编辑

在@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
)

好吧,你能做的是

类型转换为带预填充字串的字符串0

这是这样的

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

然后剩下的就可以用zip预填充。 我确信您可以管理反向订单或先前订单。 但这是简单的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM