ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

function args
  #1  
Старый 17.04.2010, 00:53
Аватар для Failure
Failure
Участник форума
Регистрация: 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, да и говнокод это полнейший.

Интересует самый оптимальный вариант реализации функции
 
Ответить с цитированием

  #2  
Старый 17.04.2010, 04:28
Аватар для shellz[21h]
shellz[21h]
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
Провел на форуме:
1934122

Репутация: 118
Отправить сообщение для shellz[21h] с помощью ICQ
По умолчанию

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";
       
}
?>
 
Ответить с цитированием

  #3  
Старый 17.04.2010, 08:18
Аватар для Failure
Failure
Участник форума
Регистрация: 21.09.2008
Сообщений: 148
Провел на форуме:
678893

Репутация: 102
По умолчанию

мне кажется тут лучше foreach использовать, не хотел передавать в качестве аргумента массив, но по сути ты прав, по нормальному иначе - никак.
 
Ответить с цитированием

  #4  
Старый 17.04.2010, 11:02
Аватар для shellz[21h]
shellz[21h]
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
Провел на форуме:
1934122

Репутация: 118
Отправить сообщение для shellz[21h] с помощью ICQ
По умолчанию

Можно передавать аргументу не массив, а строку типа "id=1, first_name=2, ...", тогда не надо заморачиваться на циклах)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Flash action scrit iguigor О Работе 2 08.10.2009 02:17
Встроенные функции и процедуры. mari00 С/С++, C#, Delphi, .NET, Asm 8 14.12.2006 16:25
chat.chiki-puki.ru - возможно ли сломать? artkino Чаты 22 07.03.2006 00:07



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ