Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由mysql查询创建的PHP多维数组_Php_Mysql - Fatal编程技术网

由mysql查询创建的PHP多维数组

由mysql查询创建的PHP多维数组,php,mysql,Php,Mysql,我在MySQL数据库中有一个基表,它有200000条记录 该表的结构如下: CREATE TABLE `npanxxmaster` ( `npanxx` varchar(6) NOT NULL DEFAULT '', `npa` varchar(3) DEFAULT NULL, `ocn_lata` varchar(7) DEFAULT NULL, `lata` varchar(3) DEFAULT NULL, `st` varchar(2) DEFAULT NULL

我在MySQL数据库中有一个基表,它有200000条记录

该表的结构如下:

    CREATE TABLE `npanxxmaster` (
  `npanxx` varchar(6) NOT NULL DEFAULT '',
  `npa` varchar(3) DEFAULT NULL,
  `ocn_lata` varchar(7) DEFAULT NULL,
  `lata` varchar(3) DEFAULT NULL,
  `st` varchar(2) DEFAULT NULL,
  `canada` varchar(10) DEFAULT NULL,
  `ext` varchar(10) DEFAULT NULL,
  `er` double DEFAULT NULL,
  `ra` double DEFAULT NULL,
  `un` double DEFAULT NULL
)
我将此表存储到一个数组中,其键为npanxx值

我有一个平面csv文件,其结构如下:

npanxx(or npa only), ER, RA , UN
关于更多信息,npanxx是一个6位数字,npa将始终是一个3位数字(来自npanxx)

现在,第一列中的平面文件可以有npanxx(6位)或npa(3位)

我需要做的是读取csv文件的每一行(我已经可以这样做了),并使用以下代码将其存储到数组中:

if (($handle = fopen($fileName, "r")) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE){
现在是棘手的部分。我需要做的是遍历每个$row(csv文件中的行),并在我从MySQL表生成的原始$npanxxmaster数组中找到一个匹配项。我遇到的问题是平面文件的第一列中可能包含npanxx或npa。我需要做的是将它们与$npanxxmaster数组中匹配的npanxx或npa进行匹配,其中任何$行的npanxx比只有npa的行的精度高

例如:

如果在平面csv文件中给出以下$rows:

201,.002,.002,.002
201200,.001,.001,.001
$npanxxmaster数组中npa为201的所有条目将获得.002、.002、.002,而201200将获得.001、.001、.001

我根本没能做到这一点。我可以提供更多我尝试过的代码或者更多的解释,如果需要的话,因为我假设我破坏了这个解释


提前感谢大家的帮助

处理查询时,创建两个数组。一个将NPANXX映射到行,另一个将NPA映射到NPANXX数组

$npanxx_array = array();
$npa_array = array();
while ($row = $stmt->fetch()) {
    $npanxx = $row['npanxx'];
    $npa = $row['npa'];
    $npanxx_array[$npanxx] = $row;
    if (!isset($npa_array[$npa])) {
        $npa_array[$npa] = array();
    }
    $npa_array[$npa][] = $npanxx;
}
然后,在处理CSV时,可以查找适当的字段

while ($row = fgetcsv($handle)) {
    if (strlen($row[0]) == 6) {
        $npanxx_to_update = array($row[0]);
    } else {
        $npanxx_to_update = $npa_array[$row[0]];
    }
    foreach ($npaxx_to_update as $npanxx) {
        // update $npanxx_array[$npanxx]
    }
}

创建两个数组,一个使用
npanxx
作为键,另一个使用
npa
作为键。在浏览CSV时,请检查第一个字段是6位还是3位,然后在相应的数组中查找。最后,我需要将更新后的$npanxxmaster数组加载到MySQL数据库中。我该如何组合这两个数组?使它们成为引用数组,以便它们都引用相同的行。然后你可以在任意一个数组中循环来做所有的更新。我一直在用NPA做一个数组时遇到问题,因为它会有很多NPANXX映射到一个NPA,这会使密钥不唯一。我只得到NPA_数组中最后一个可能的NPANXX。例如,在else语句中,我打印\u r($npanxx\u to\u update),并打印201999,这是在它转到下一个npa 202之前最后一个可能的npanxx。我认为这是因为有多个npanxx映射到1个npa,并且由于我们使用npa作为npa_数组中的键,所以只需要最后一条记录,更不用说我发现了我的问题。我现在正在测试它,并将更新结果。非常感谢。