Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

17.04.2010, 00:53
|
|
Участник форума
Регистрация: 21.09.2008
Сообщений: 148
Провел на форуме: 678893
Репутация:
102
|
|
function args
Есть функция edit в которой передаются куча аргументов, например
PHP код:
function edit($id, $first_name, $second_name, $email,...)
тоесть реально много
далее, после небольших манипуляций с ними идёт
Код:
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, да и говнокод это полнейший.
Интересует самый оптимальный вариант реализации функции
|
|
|

17.04.2010, 04:28
|
|
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
Провел на форуме: 1934122
Репутация:
118
|
|
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";
}
?>
|
|
|

17.04.2010, 08:18
|
|
Участник форума
Регистрация: 21.09.2008
Сообщений: 148
Провел на форуме: 678893
Репутация:
102
|
|
мне кажется тут лучше foreach использовать, не хотел передавать в качестве аргумента массив, но по сути ты прав, по нормальному иначе - никак.
|
|
|

17.04.2010, 11:02
|
|
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
Провел на форуме: 1934122
Репутация:
118
|
|
Можно передавать аргументу не массив, а строку типа "id=1, first_name=2, ...", тогда не надо заморачиваться на циклах)
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|