2 回答
TA贡献1845条经验 获得超8个赞
要删除进入数据库的无关逗号,您可以根据自己的喜好使用array_filter, trim, 或。preg_replace
$this->input->post('coresubjs[]')理论值为
array(
'',
'',
'0',
'A',
'B',
'',
'D',
'',
'',
);
仅使用implode(',')
会导致
,,0,A,B,,D,,
免责声明
但是请记住,post 值中的任何逗号都不会被正确解释,应该使用其他方式进行转义。例如:1,000
将被分解为array("1", "000")
. 出于这个原因,我建议重构以支持使用json_encode()
andjson_decode()
或serialize()
and unserialize()
,而不是implode(',')
andexplode(',')
数组过滤器
从数组参数中删除“空”值 ( 0, "", false, null
) implode
。这将适用于任何空的输入值,包括数组的中间值。
implode(',', array_filter($this->input->post('coresubjs[]')))
结果
请注意,所有无关的逗号和0
值都已删除
A,B,D
要避免诸如 之类的“空”值的问题0, false
,您可以改用自定义回调。
implode(',', array_filter($this->input->post('coresubjs[]'), function($value) { return null !== $value && '' !== $value; }))
结果
通知所有无关的逗号都被删除
0,A,B,D
修剪
仅从值中删除前导和尾随逗号implode
。
trim(implode(',', $this->input->post('coresubjs[]')), ',')
结果
请注意,前导逗号和尾随逗号已被删除,但中间的额外逗号保留了下来。
0,A,B,,D
preg_replace
类似于trim
,从值中删除前导和尾随逗号implode
,并用单个逗号替换中间的任何 2 个或更多逗号。
preg_replace(['/,{2,}/', '/^,+/', '/,+$/'], [',', '', ''], implode(',', $this->input->post('coresubjs[]')))
图案说明:
,{2,}
任何 2 个或更多逗号^,+
以1个或多个逗号开头,+$
以 1 个或多个逗号结尾
结果
通知所有无关的逗号已被删除
0,A,B,D
TA贡献1846条经验 获得超7个赞
在你的update_core function,你需要trim额外的','。你可以这样做 -
public function update_core(){
$data = array(
'core_subjects' => rtrim(implode(',', $this->input->post('coresubjs[]')), ','); // remove the extra ',' to the right
);
$this->db->where('id', $this->input->post('coresubjID'));
return $this->db->update('subjects', $data);
}
另外,请记住,您不必在每次更新时都删除数据。更新时它会自动覆盖以前的值。所以你的remove_core方法是多余的,应该删除
- 2 回答
- 0 关注
- 104 浏览
添加回答
举报