将CSV数据合并到php数组中并产生一些无关的结果

时间:2018-07-17 04:20:20

标签: php arrays csv

该代码几乎完美运行。我有两个csv文件,它们正在构建到数组中,然后合并数组以包含相关信息。第一个包含部件号,简短描述和spc(category)。第二个包含零件编号和可用数量。

这个想法是根据零件号匹配并合并此信息,然后对信息进行排序并根据spc(category)进行显示。

在测试了每个阵列的读数之后,问题似乎出现在STEP 4上,而进一步的化合物出现在STEP 5上。

大约有70,000条记录。其中大多数已正确合并并显示,如下所示:

[#10-CH-L/W] => Array
        (
            [0] => 362.00
            [1] => HIGH COLLAR LOCK WASHER
            [2] => NUTBLT
        )

但是在STEP 4中,有这样的描述被输入到它们自己的数组中:(这些应该在相关部分的[1]点中)

[5872] => LINCOLN ADAPTOR 90-DEG 1/8 X 1/8
    [5873] => MILW CYL H SERIES SPECIAL 8 X 16
    [5874] => MILW CYL NEENAH # 55-40-6080-7
    [5875] => MILW CYL L&S #DS001268 2 X 10
    [5876] => CONTINENTAL PART SPOOL F1 V*50M 

在第5步中,从spcs创建进一步的数组,如下所示:(这些数组应位于相关零件的[2]点中)

 [11360] => NRGFIT
    [11361] => NRGFIT
    [11362] => NRGFIT
    [11363] => LINLUB
    [11364] => CHDPRT

通过查看csvs中的数据,数据似乎是一致的。发生问题的记录中确实有两个文档中都存在的部件号。这是array_merge_recursive函数的问题吗?我需要更仔细地研究数据吗?这是如此接近完美!

       <?php    
               $file1  = fopen('inventory/MasterInfoRows.csv', 'r');
                $file2 = fopen('inventory/ItemLocationRows.csv', 'r');

                $line = array();
                $work = array();


                //create arrays for part number, description, and spc from Masterinforows.csv

                while (($line = fgetcsv($file1)) !== FALSE){

                   list($part, $desc, $spc) = $line;

                    $test1[] = $part;
                    $test2[] = $desc;
                    $test3[] = $spc;



                }               

               //create arrays for part number and available amount from itemlocationrows.csv

                while (($work= fgetcsv($file2, 1000)) !== FALSE) {

                    list($match, , , , , , , , $available) = $work;

                        $parts[] = $match;
                        $amounts[] = $available;


                    } 


                    // STEP 1 combine ItemLocationRows CSV part numbers with associated amounts 
                    $results = array_combine($parts, $amounts);

                    // STEP 2 combine MasterInfoRows part numbers with short descriptions
                    $master = array_combine($test1, $test2);

                    // STEP 3 combine MasterInfoRows part numbers with SPC
                    $master2 = array_combine($test1, $test3);

                    // STEP 4 combine itemlocation row part numbers and amount with Masterinfo Row part numbers short descriptions (about 6,000/70,000 records do not merge properly)
                    $alldata = array_merge_recursive($results, $master);


                    // STEP 5 combine itemlocationrow part numbers, amounts, and spc with MasterInfoRows part numbers and short descriptions (additional 5,000 extraneous spc values in array)
                    $success = array_merge_recursive($alldata, $master2);               



        //search through final array for records containing a specific spc in the array and return associated data

        function searchForId($id, $array) {
                    $keyarray = array();
                       foreach ($array as $key => $val) {
                            if (isset($val[2]) && $val[2] === $id) {
                                 array_push( $keyarray, $key);
                                 echo "<tr><td>$key</td><td>$val[1]</td><td>$val[0]</td></tr>";
                                }

                           }
                            return $keyarray;

               }    





        ?>

编辑 可能的线索是:itemlocationrows包含:75,300条记录,而masterlocationrows包含70,144条记录

1 个答案:

答案 0 :(得分:0)

好,所以我将问题缩小到array_merge_recursive覆盖数字键的事实。因此,错误地合并的记录实际上确实具有数字键。仍在尝试找出可以给我所需输出的解决方法。