我的 PHP 脚本从 HTML 输入接收数据作为数组:
<input type="checkbox" name="value[]" value="1" />
<input type="checkbox" name="value[]" value="2" />
<input type="checkbox" name="value[]" value="3" />
...
我目前的序列化方法是这样的:
<?php
class DataClass {
private $separator = ",";
private function sanitize($input){
$patterns = array(
'/^'.$this->separator.'/',
'/'.$this->separator.$this->separator.'/',
'/'.$this->separator.'$/'
);
$replacements = array(
'',
$this->separator,
''
);
return preg_replace($patterns, $replacements, $input);
}
public function deserialize($input){
return explode($this->separator, $this->sanitize($input));
}
private function serialize($input){
$bucket = array();
if(is_array($input)):
foreach($input as $value){
if(!empty($value)):
array_push($bucket, $value);
endif;
}
return $this->sanitize(implode($this->separator, $bucket));
else:
return "";
endif;
}
public function store($formdata) {
$formdata['value'] = empty($formdata['value']) ? '' : $this->serialize($formdata['value']);
// save $formdata to database
}
}
?>
所以,读完这篇文章后,我的问题是:
- 优化现有代码效率的最佳方法是什么?
- 使用不同的方法将简单的索引数组转换为可以存储在数据库中的东西会有任何性能优势吗?
- 使用 BLOB 列类型与我目前使用的 varchar(255) 相比如何?
- 由于它不是关联数组,
json_encode
甚至是正确的方法,还是只是矫枉过正?