我正在研究一个项目,需要有条形码显示的一切,所以我已经为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 is 8*10^1 + 7*10^2 + 6*10^3...
另一个选项是将其强制转换为字符数组,然后将其作为字符获取。
编辑
@HamZa DzCyberDeV建议后
$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预填充。我相信你可以处理反向或先前的订单。但这是一个简单的方法。