Есть функция edit в которой передаются куча аргументов, например PHP: function edit($id, $first_name, $second_name, $email,...) тоесть реально много далее, после небольших манипуляций с ними идёт Code: UPDATE `table` SET ..... WHERE id='$id' загвоздка в том что функция должна менять любое указанное в аргументе значение. То есть если я вызываю edit(1, '', 'Вася', '', '', ....) то должно сменится только first_name в таблице `table` аналогично с 2 и больше аргументами. На мысль пришла идея что надо бы загнать всё это в массив с $key`ем таким же как аргумент, и $value с его value PHP: function edit($id, $first_name, $second_name, $email,...) { $arr = Array([id]=>$id, [first_name]=> $first_name, .....); foreach($arr as $key=>$value) if(strlen($value)>0) $query .= $key."=".$value.","; но в конце запроса будет лишняя запятая (substring еще не хватало), нет такой функции которая бы сделала этот самый $arr, да и говнокод это полнейший. Интересует самый оптимальный вариант реализации функции
PHP: <?php edit(array('id' => 1, 'first_name' => '', ....)); function edit($array) { $keys = array_keys($array); $size = sizeof($keys); $query = ''; for($i = 0; $i < $size; $i++) { if($i < $size - 1) $query .= $keys[$i].'='.$array[$key[$i]].','; else $query .= $keys[$i].'='.$array[$key[$i]]; } print $query."\n"; } ?>
мне кажется тут лучше foreach использовать, не хотел передавать в качестве аргумента массив, но по сути ты прав, по нормальному иначе - никак.
Можно передавать аргументу не массив, а строку типа "id=1, first_name=2, ...", тогда не надо заморачиваться на циклах)