如果键不存在则发送 null

Posted

技术标签:

【中文标题】如果键不存在则发送 null【英文标题】:Send null if key does not exists 【发布时间】:2015-12-02 01:57:12 【问题描述】:

我有 csv 文件,我将其解析为数组并传递给 mysql 表。 某些 CSV 文件不包含数据库中的某些列,当我将其转换为数组时,表中的列数少于我得到的“语法错误”。

从我调用的控制器:

function sendHistoric()
        $this->load->model('Historic_model');
        $this->load->library('csvreader');
        foreach($this->divisions as $div)
            $result =   $this->csvreader->parse_file("assets/csv/1516$div.csv");//path to csv file
            $this->Historic_model->loadCSVtoDB($result);
            //var_dump($result);
        
     

在我的模型中:

function loadCSVtoDB($data)
    $sql = "call ins_historic(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

    foreach($data as $row)
        var_dump($row);
        $this->db->query($sql,$row);    
    
    //echo $this->db->conn_id->error_message();

我能否以某种方式发送 NULL 来代替他发现我的数据数量较少或者我需要检查数组的每个元素是否存在,如果不存在则将其设置为 null?

【问题讨论】:

【参考方案1】:

要考虑的一个选项不是编写较慢的 php 循环,而是利用LOAD DATA INFILE 块内的灵活代码可能性,例如在此答案链接here 中看到的处理。可能的功能和转换是无穷无尽的。

也许 6 个一个,半打另一个。但也适用于更简单的例程,我建议快速获取数据。

编辑:(基于下面的 OP 评论)

create table t62
(   c1 int not null,
    c2 varchar(10) not null,
    c3 int not null,
    c4 char(5) not null,
    someOther int not null,
    -- an addtion 57 columns here
    primary key(c1,c2,c3,c4)
);

-- Mimic the LOAD DATA INFILE or PHP loop:
insert t62(c1,c2,c3,c4,someOther) values (1,'t',1,'01742',777);
insert t62(c1,c2,c3,c4,someOther) values (1,'t',1,'01742',777); -- error 1062: Dupe PK
insert t62(c1,c2,c3,c4,someOther) values (1,'t',2,'01742',777); -- happy

所以我不知道,您会如何建议代码为您选择复合 PK?如果是这样,该虚构数据将如何处理其与其他数据的关系?

【讨论】:

我会像你描述的那样尝试,有 62 列,所以如果它为 null,我需要将每一列设置为 null... 前 4 列是主键,我可以使用此负载为前 4 列设置一些默认数字或字符串 intead null 吗? 我得到错误号:28000/1045 用户'user'@'localhost'的访问被拒绝(使用密码:是)我的服务器不允许我加载数据:S 听起来像一个普通的简访问错误,不确定你在做什么。验证后,您可以从 PHP 内部发出 LOAD DATA INFILE,如果 (LOAD DATA INFILE) 是您正在执行的操作。 通过对每列使用 isset 解决,愚蠢但有效:/ 我的服务器提供商不允许我使用 LOAD FILE。

以上是关于如果键不存在则发送 null的主要内容,如果未能解决你的问题,请参考以下文章

如果键不存在,则字典返回默认值[重复]

如果字典键不可用,则返回 None

如果键不存在,C# Dictionary<int, int> 查找会发生啥?

ConcurrentDictionary操作

如果存在数组,则需要 Laravel 验证数组元素

如果键不存在,为啥 std::map operator[] 会创建一个对象?