首页 > 解决方案 > 如何格式化 php 数组值并将它们插入数据库

问题描述

这是我的代码,我在其中读取 csv 文件(我从银行获得),将其解析为数组并将其插入数据库:

$csvFile = file('tecajnica.csv');
$keys = str_getcsv(array_shift($csvFile), ';');
foreach ($csvFile as $csvRecord) {
    // combine our $csvRecord with $keys array
    $csv[] = array_combine($keys, str_getcsv($csvRecord, ';'));
}

foreach( $csv as $row) {
$db2 = new PDO ("odbc:as400");
$sqlf93p = $db2->prepare("INSERT INTO..... VALUES (".$row['sifra'].",".$row['Kupovni2']." ......)
$sqlf93p->execute();

这就是我的数组的样子:

[0]=>
  array(10) {
    ["id"]=>
    string(2) "67"
    ["drzava"]=>
    string(10) "Australija"
    ["sifra"]=>
    string(7) "036 AUD"
    ["VrijediZa"]=>
    string(1) "1"
    ["Kupovni1"]=>
    string(8) "4,5207"
    ["Kupovni2"]=>
    string(8) "4,589597"
    }
[1]=>
  array(10) {
    ["id"]=>
    string(0) ""
    ["drzava"]=>
    string(5) "Ceska"
    ["sifra"]=>
    string(7) "203 CZK"
    ["VrijediZa"]=>
    string(1) "1"
    ["Kupovni1"]=>
    string(8) "0,277098"
    ["Kupovni2"]=>
    string(8) "0,2821"
 }

* * * * * * * ETC * * * * * *

所以我的问题是:

1)如何转换["sifra"]=> "203 CZK"["sifra"]=> "203"(我只希望在插入之前出现数值)?

2)如何转换["Kupovni2"]=> "0,2821"["Kupovni2"]=> "0,282100"(插​​入前我想要6个小数位)?

谢谢。

标签: phparrayscsvconverters

解决方案


另一种选择是使用\D+空字符串替换所有非数字。

$digitsOnly = preg_replace('/\D+/', '', "203 CZK");
echo $digitsOnly; // 203

对于附加零,您可以使用str_pad

$parts = explode(',', '0,2821');
$str = implode(',', [$parts[0], str_pad($parts[1], 6, '0', STR_PAD_RIGHT)]);
echo $str; // 0,282100

php演示

您的代码可能如下所示:

foreach( $csv as $row) {
    $db2 = new PDO ("odbc:as400");
    $sifra = preg_replace('/\D+/', '', $row['sifra']);
    $parts = explode(',', $row['Kupovni2']);
    $kupovni2 = implode(',', [$parts[0], str_pad($parts[1], 6, '0', STR_PAD_RIGHT)]);
    $sqlf93p = $db2->prepare("INSERT INTO..... VALUES (". $sifra . "," . $kupovni2 ." ......);
    $sqlf93p->execute();

推荐阅读