【问题标题】:Insert PHP Regex Exploded Array Into MySQL Table将 PHP 正则表达式爆炸数组插入 MySQL 表
【发布时间】:2020-07-18 00:55:49
【问题描述】:

我有一个用Regex分解的数组,这里是数组的一部分,名为$data;

array(6) {
  [0]=>
  array(1) {
    [0]=>
    string(77) "Achnanthes brevipes C.Agardh, Syst. Alg.: 1 (1824). / Küçük sucıncığı."
  }
  [1]=>
  array(1) {
    [0]=>
    string(10) "Achnanthes"
  }
  [2]=>
  array(1) {
    [0]=>
    string(8) "brevipes"
  }
  [3]=>
  array(1) {
    [0]=>
    string(8) "C.Agardh"
  }
  [4]=>
  array(1) {
    [0]=>
    string(21) "Syst. Alg.: 1 (1824)."
  }
  [5]=>
  array(1) {
    [0]=>
    string(22) "Küçük sucıncığı"
  }
}
array(6) {
  [0]=>
  array(1) {
    [0]=>
    string(89) "Achnanthes cocconeiformis Mann, U.S. Nat. Mus., Bull. 6: 182 (1925). / Top sucıncığı."
  }
  [1]=>
  array(1) {
    [0]=>
    string(10) "Achnanthes"
  }
  [2]=>
  array(1) {
    [0]=>
    string(14) "cocconeiformis"
  }
  [3]=>
  array(1) {
    [0]=>
    string(4) "Mann"
  }
  [4]=>
  array(1) {
    [0]=>
    string(36) "U.S. Nat. Mus., Bull. 6: 182 (1925)."
  }
  [5]=>
  array(1) {
    [0]=>
    string(17) "Top sucıncığı"
  }
}
array(6) {
  [0]=>
  array(1) {
    [0]=>
    string(108) "Achnanthes gibberula Grunow, Kongl. Svenska Vetensk.-Akad. Handl. 17(2): 121 (1880). / Kambur sucıncığı."
  }
  [1]=>
  array(1) {
    [0]=>
    string(10) "Achnanthes"
  }
  [2]=>
  array(1) {
    [0]=>
    string(9) "gibberula"
  }
  [3]=>
  array(1) {
    [0]=>
    string(6) "Grunow"
  }
  [4]=>
  array(1) {
    [0]=>
    string(55) "Kongl. Svenska Vetensk.-Akad. Handl. 17(2): 121 (1880)."
  }
  [5]=>
  array(1) {
    [0]=>
    string(20) "Kambur sucıncığı"
  }
}

还有更多..

我的正则表达式是:

$turRegex = '/^([^\s]+)[\s]([^\s]+)[\s]([^\s]+)[,][\s]([A-Za-z].+)[\s][\/][\s](.+)[.]/m';

我的 foreach 循环:

foreach ($data as $data) {


    if (!empty(preg_match_all($turRegex, $data, $matches))) {

        echo "<pre>";
        var_dump($matches);
        echo "</pre>";

    }
}

我的表名是“algeaSpecies”,列是; "id","genusName","speciesEpiteth","author","publication","TurkishName"

我想把这个插入到 genusName;

[1]=>
  array(1) {
    [0]=>
    string(10) "Achnanthes"

这个给speciesEpiteth;

  [2]=>
  array(1) {
    [0]=>
    string(8) "brevipes"
  }

还有其他人……

我正在使用 MySQLi

谢谢

【问题讨论】:

    标签: php arrays multidimensional-array mysqli foreach


    【解决方案1】:

    首先我注意到您在循环中使用$data 作为数组和项。

    在下面的代码中,我假设您不想要第一个索引(查询不清楚)。

    另外,替换数据库连接凭据。

    $con = new mysqli('db_host', 'username', 'password', 'db_name');
    $boundArray = array_fill(0, 5, null);
    $query = "INSERT INTO `algeaSpecies` (`genusName`, `speciesEpiteth`, `author`, `publication`, `TurkishName`) VALUES (?,?,?,?,?);";
    $stmt = $con->prepare($query);
    $stmt->bind_param("sssss", ...$boundArray);
    
    
    foreach ($data as $item) {
        $i = -1;
        foreach ($item as $index) {
            if ($i === -1) {
                $i++;
                continue;
            }
            $boundArray[$i++] = $index[0];
        }
        $stmt->execute();
    }
    $stmt->close();
    $con->close();
    

    【讨论】:

    • 我真的不明白
    • 哪一部分?第 1 行是与 DB 的连接,第 2 行是一个数组,以默认值绑定到准备好的语句,第 3 -5 行是数据库准备。逻辑发生在循环中:获取每个索引并用它的值填充 boundArray,然后执行准备好的语句。
    • 您是否测试过它是否有效?我对在循环中执行有点怀疑。你 splat 数组,我不确定它是否保留了引用。
    • 我已经根据您提供的数据结构对其进行了测试。我已将 $data 拆分 2 次以获取数据(基于您提供的数据结构)。如果您需要 $index 和 $item 保留可以在它们之前添加 & 的引用($data as &$item),但我不确定您为什么要这样做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多