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