array_filter将数组作为结果发送到DB而不是值

时间:2016-07-12 14:39:08

标签: php arrays

您好我试图从数组中删除所有空值,但在我的数据库中不是这个,记录是:数组而不是实际值。

$stmt->bindValue(':number', $this->number, PDO::PARAM_STR);

我正在使用的是:

if( isset( $_POST['number'])) 
  { $this->number = array_filter($_POST['number']); 
  }

数组:

number[0] 32321    
number[1]   
number[2]   

预期结果是一个数组或变量,其中只有一个值不为空number[0] 32321

欢迎任何帮助。

2 个答案:

答案 0 :(得分:1)

array_filter将始终返回一个元素数组,它将删除空值但在将其分配给$this->number之前,您必须遍历返回的数组,然后插入到DB。或者你可以内爆该数组并将其作为csv存储在DB中。

答案 1 :(得分:1)

您看到"Array"(PHP中数组的标准字符串表示形式),因为array_filter返回一个数组,而不是单个值,因此$this->number中的内容不是32321 {1}},它是array(32321)。如果您更改错误报告设置,您将看到有关数组到字符串转换的注意事项。

您可以将分配添加到if条件(如果您不喜欢,则添加另一个嵌套)。然后,如果array_filter返回一个空数组,则不会进入if块。

if (isset( $_POST['number']) && $this->number = array_filter($_POST['number'])) {
    // insert values from $this->number into your database
}

if块中,当您尝试插入值时,为了不像您当前获得的"Array",您可以通过循环$this->number进行多次插入数组并为每个项执行准备好的语句:

foreach ($this->number as $number) {
    $stmt->bindValue(':number', $number, PDO::PARAM_STR);
    $stmt->execute();
}

或者,如果您只想在$_POST['number']中插入第一个内容并忽略任何其他非空值,则可以绑定数组中的第一个值:

$stmt->bindValue(':number', reset($this->number), PDO::PARAM_STR);