function args

Discussion in 'PHP' started by Failure, 17 Apr 2010.

  1. Failure

    Failure Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    Есть функция 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, да и говнокод это полнейший.

    Интересует самый оптимальный вариант реализации функции
     
  2. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    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";
           
    }
    ?>
     
    1 person likes this.
  3. Failure

    Failure Elder - Старейшина

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    мне кажется тут лучше foreach использовать, не хотел передавать в качестве аргумента массив, но по сути ты прав, по нормальному иначе - никак.
     
  4. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    Можно передавать аргументу не массив, а строку типа "id=1, first_name=2, ...", тогда не надо заморачиваться на циклах)