Will you encounter such a situation? Every time the data is obtained, there will be a certain difference between the data and the historical version. However, using ThinkPHP's addAll() function, the existing data will be deleted and rewritten. This is obviously not what we want. But writing sql by myself with dozens of fields every time is also boring. How to achieve automatic generation of sql elegantly and easily? So here is the method below.
/** * [array_to_sql 根据数组key和value拼接成需要的sql] * @param [type] $array [key, value结构数组] * @param string $type [sql类型insert,update] * @param array $exclude [排除的字段] * @return [string] [返回拼接好的sql] */ function array_to_sql($array, $type='insert', $exclude = array()){ $sql = ''; if(count($array) > 0){ foreach ($exclude as $exkey) { unset($array[$exkey]);//剔除不要的key } if('insert' == $type){ $keys = array_keys($array); $values = array_values($array); $col = implode("`, `", $keys); $val = implode("', '", $values); $sql = "(`$col`) values('$val')"; }else if('update' == $type){ $tempsql = ''; $temparr = array(); foreach ($array as $key => $value) { $tempsql = "'$key' = '$value'"; $temparr[] = $tempsql; } $sql = implode(",", $temparr); } } return $sql; }
Of course, there are still many things to consider about this method. It works, but it's not the best. Garden apes, do you have a better way? Please tell me!