我已经使函数返回序列号的第N位,例如:
1234567891011121314151617
我的功能就像这样
<?php
function getLength($number) {
$length = 0;
if ($number == 0){
$length = 1;
} else {
$length = (int) log10($number)+1;
}
return $length;
}
?>
<?php
function getDigitNumber($digit){
$number = 10000000000;
$data = array();
for($i=1;$i<=$number;$i++){
if(getLength($i) > 1){
$array = str_split($i,1);
for($n=0;$n<=count($array)-1;$n++){
array_push($data,$array[$n]);
}
}else{
$data[$i] = $i;
}
}
return $data[$digit];
}
?>
当我执行时,我遇到了类似此错误消息的问题“致命错误:允许的内存大小为134217728字节耗尽(试图分配36个字节)”。也许是因为我在var $number
我如何解决这个问题......或者我如何制作能够处理这些大数字的函数
感谢..
答案 0 :(得分:10)
我做了一个函数将返回序列号的第N位, 例如:
1234567891011121314151617
The 5-th digit is 5 The 20-th digit is 1
为什么不:
$number[5];
$number[20];
无论如何,数字必须是一个字符串,所以只需使用数组语法访问该字符。
答案 1 :(得分:2)
关于内存问题,确实是由于数字很大:
$number = 10000000000;
$data = array();
for($i=1;$i<=$number;$i++){
if(getLength($i) > 1){
$array = str_split($i,1);
for($n=0;$n<=count($array)-1;$n++){
array_push($data,$array[$n]);
}
} else{
$data[$i] = $i;
}
}
基本上,它分配了一个约500,000,000,000个项目的数组($data
),相当大...
按照其他答案/评论中的建议操作您的数字作为字符串(或字符数组)将更容易,更易读,更快,耗费更多内存,...