如何对数组值求和并保存在列表中

时间:2019-05-15 12:23:24

标签: php

我的文件超过7mb,其中包含我要输入的数字,并在下面排列:

$allbarcodes = array(3117148100,3117148110,3117148120,3117148130,3118011010,3118011020,3118011060,3118011070,3118011080,3118011090,3118011100,3118011110,3118011120,3118011130,3118012010,3118012020,3118012060,3118012070,3118012080,3118012090,3118012100,3118012110,3118012120,3118012130,3118654010,3118654020,3118654060,3118654070,3118654080,3118654090,3118654100,3118654110,3118654120,3118654130,3118797010,3118797020,3118797060,3118797070,3118797080,3118797090,3118797100,3118797110,3118797120,3118797130,3118846010,3118846020,3118846060,3118846070,3118846080,3118846090,3118846100,3118846110,3118846120,3118846130,3119009010,3119009020,3119009060,3119009070,3119009080,3119009090,3119009100,3119009110,3119009120,3119009130,3119011010,3119011020,3119011060,3119011070,3119011080,3119011090,3119011100,3119011110,3119011120,3119011130,3119012010,3119012020,3119012060,3119012070);



for($i = 1; $i < count($allbarcodes); $i++)
    {
      try
      { 
        $sumOfnum = summation((int)$allbarcodes[$i]);
        $allbarcodes[$i] =  str_pad($allbarcodes[$i],10,'0',STR_PAD_LEFT);
        array_push($barcodeList,$sumOfnum.",".$allbarcodes[$i]);
      }
      catch(Exception $e)
      {
        echo "n Exception Caught", $e->getMessage(); 
      }
    }


function summation( $n)
{
    $m =0; $sum=0;

    while($n != 0)
    {
        $m = $n % 10;
        $sum = $sum + $m;
        $n = (int)$n/10;
    }
    return $sum;
}

我的文件中大约有300,000个数字,我需要对所有数字求和并创建一个总和值文件,并将该总和值的所有数字保存在txt文件中。我写了下面的语句来创建数组:

array_push($barcodeList,$sumOfnum.",".(int)$allbarcodes[$i]);

例如:如果数字为“ 2399879110”,其总和为“ 49”,则该数字应写入49.txt文件。

对于某些数字,此代码可以正常工作,但是当数字更多时,此代码将无法正常工作,并且所有数字或各种求和值(如23,35)或任何开始复制到46.txt文件中的值。

1 个答案:

答案 0 :(得分:1)

  

在64位系统上,整数可以为-9,223,372,036,854,775,808至9,223,372,036,854,775,807

     

在32位系统上,整数可以从-2,147,483,648到2,147,483,647

您的数字似乎大于32位的最大值,但是,如果您从文件中读取它们,它们应该作为字符串出现,所以不要将它们强制转换为(int)。而且,这要容易得多:

foreach($allbarcodes as $num) {
    $result[] = array_sum(str_split($num));
}

Demo,其输出在64位系统上。

看起来像您想要的sum,number

$result[] = array_sum(str_split($num)).",$num";

关于将数字保存在名为和的文件中:

foreach($allbarcodes as $num) {
    file_put_contents("/path/to/".array_sum(str_split($num).".txt", $num);
}

如果您想在文件中写入sum,number,那么当然:

$sum = array_sum(str_split($num);
file_put_contents("/path/to/$sum.txt", "$sum,$num");