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

将CSV数据与一些无关的结果组合到php数组中,php,arrays,csv,Php,Arrays,Csv,这段代码工作得几乎完美。我有两个csv文件,我正在将它们构建到数组中,然后合并数组以包含相关信息。第一个包含零件号、简短描述和spc(类别)。第二个包含零件号和可用数量 其思想是根据零件号匹配合并此信息,并根据spc(类别)对信息进行排序和显示 在测试每个阵列的读数后,问题似乎出现在步骤4,并在步骤5出现进一步的复合 大约有70000条记录。其中大部分已合并并正确显示,如下所示: [#10-CH-L/W] => Array ( [0] => 3

这段代码工作得几乎完美。我有两个csv文件,我正在将它们构建到数组中,然后合并数组以包含相关信息。第一个包含零件号、简短描述和spc(类别)。第二个包含零件号和可用数量

其思想是根据零件号匹配合并此信息,并根据spc(类别)对信息进行排序和显示

在测试每个阵列的读数后,问题似乎出现在步骤4,并在步骤5出现进一步的复合

大约有70000条记录。其中大部分已合并并正确显示,如下所示:

[#10-CH-L/W] => Array
        (
            [0] => 362.00
            [1] => HIGH COLLAR LOCK WASHER
            [2] => NUTBLT
        )
但在第4步,有一些描述会像这样输入到它们自己的数组中:(这些描述应该位于相关零件的[1]位置)

在第5步,从SPC创建更多的数组,如下所示:(这些数组应该位于相关零件的[2]位置)

从CSV中的数据来看,数据似乎是一致的。出现问题的记录在两个文档上都有零件号。这是数组\合并\递归函数的问题吗?我需要更仔细地查看数据吗?这是如此接近完美

       <?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包含:75300条记录,而masterlocationrows包含70144条记录。好的,所以我已经将问题缩小到数组\u merge\u recursive覆盖数字键这一事实。因此,错误合并的记录实际上有数字键。仍在努力找到一个解决方案,让我获得所需的输出

 [11360] => NRGFIT
    [11361] => NRGFIT
    [11362] => NRGFIT
    [11363] => LINLUB
    [11364] => CHDPRT
       <?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;

               }    





        ?>