该代码几乎完美运行。我有两个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条记录
答案 0 :(得分:0)
好,所以我将问题缩小到array_merge_recursive覆盖数字键的事实。因此,错误地合并的记录实际上确实具有数字键。仍在尝试找出可以给我所需输出的解决方法。