【问题标题】:Howto format php array values & insert them into database [duplicate]如何格式化php数组值并将它们插入数据库[重复]
【发布时间】:2019-08-28 01:57:59
【问题描述】:

这是我的代码,我在其中读取 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"
 }

* * * * * * * 等 * * * * * *

所以我的问题是:

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

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

谢谢。

【问题讨论】:

  • 1) 只需转换为整数。 2)将“,”替换为“。”然后使用函数numer_format
  • $sqlf94p 未定义。你上面的一行使用了$sqlf93p
  • 谢谢。我已将 $sqlf94p 更改为 $sqlf93p。我的错误..

标签: php arrays csv converters


【解决方案1】:
  1. 要从字符串中获取数字,您可以这样做

    $string = '203 CZK';
    echo (int) $string;
    

$string = '203 CZK';
echo filter_var($string, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
  1. 要使字符串长度为 8,您可以使用 str_pad

    $string = '0,2821';
    echo str_pad($string, 8, "0", STR_PAD_RIGHT);
    

结果:-

0,282100

【讨论】:

    【解决方案2】:

    另一种选择是使用空字符串替换所有使用\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 demo

    您的代码可能如下所示:

    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();
    

    【讨论】:

    • 非常感谢大家。你让我免于长时间的谷歌搜索;)我尝试了 Rakesh Jakhar 和 The Fourth Bird 的解决方案,他们都解决了我的问题。现在,我还有一个问题。当我从数组中得到空值时,我得到“,000000”与内爆/爆炸解决方案和“00000000”与简单的str_pad。如何在逗号(0,000000)之前获得第一个数字?谢谢。
    • 您可以检查该值是否为空,然后添加0,000000
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2019-12-05
    • 2016-05-26
    相关资源
    最近更新 更多