Строчные каждый аргумент функции - PullRequest
2 голосов
/ 25 марта 2020

Мне нужно прописать каждый аргумент моей функции в нижнем регистре.

function somefunc($a, $b, $c, $d, $e, $f, $g) {
    $a = mb_strtolower($a);
    $b = mb_strtolower($b);
    $c = mb_strtolower($c);
    $d = mb_strtolower($d);
    $e = mb_strtolower($e);
    $f = mb_strtolower($f);
    $g = mb_strtolower($g);
}

Я пробовал это, но это не работает должным образом:

function somefunc($a, $b, $c, $d, $e, $f, $g) {
    $args = func_get_args();
    foreach($args as $h) {
        $h=mb_strtolower($h);
    }
}

Как мне поступить?

Ответы [ 5 ]

0 голосов
/ 25 марта 2020

Изменить по ссылке (без возвращаемого значения), добавив & к каждому входящему параметру вашей пользовательской функции.

array_walk() пожаловался на повторение этих ссылок, поэтому я остановился на classi c foreach() l oop (который также изменяется по ссылке).

Если вы распечатываете их ... func_get_args() менее кооперативен, чем get_defined_vars(), потому что первый создает индексированный массив, а второй создает ассоциативный массив, который поддерживает отношения переменных.

Код: ( Демо )

function somefunc(&$a, &$b, &$c, &$d, &$e, &$f, &$g) {
    foreach (get_defined_vars() as &$v) {
        $v = mb_strtolower($v);
    }
}

$a = 'HÈllo1';
$b = 'HÈllo2';
$c = 'HÈllo3';
$d = 'HÈllo4';
$e = 'HÈllo5';
$f = 'HÈllo6';
$g = 'HÈllo6';

somefunc($a, $b, $c, $d, $e, $f, $g);
var_export([$a, $b, $c, $d, $e, $f, $g]);

Выход:

array (
  0 => 'hèllo1',
  1 => 'hèllo2',
  2 => 'hèllo3',
  3 => 'hèllo4',
  4 => 'hèllo5',
  5 => 'hèllo6',
  6 => 'hèllo6',
)
0 голосов
/ 25 марта 2020
    function somefunc($a, $b, $c, $d, $e, $f, $g) {
        // get all parameter value with key
        $args = get_defined_vars();
        // loop $args
        foreach($args as $key => $val) {
            // assign lowered $val to variable named from $key value
            ${$key} = mb_strtolower($val);
        }
    }

Демо: https://3v4l.org/EWGVg

0 голосов
/ 25 марта 2020

Вы также можете использовать следующую функцию:

function all_to_lower(...$args){

    foreach($args as &$arg){
        $arg = strtolower($arg);   // or mb_strtolower
    } 

    return $args;  
}

$out = all_to_lower('TRETE','QQREWR');

print_r($out);

Демо

В вашем случае вам необходимо заменить свой foreach l oop с:

foreach($args as &$arg) {
    $arg = mb_strtolower($arg);
}
0 голосов
/ 25 марта 2020

Вы можете использовать этот метод, сначала получить список всех аргументов функции, выполнить итерации по ним и изменить их.

function somefunc($a, $b, $c, $d, $e, $f, $g) {
    $params = (new ReflectionFunction(__FUNCTION__))->getParameters();
    foreach ($params as $param) {
        ${$param->name} = mb_strtolower(${$param->name});
    }
}

ПРИМЕЧАНИЕ: при наличии имени переменной в строке, например "a", вы можете использовать ${"a"} для указания на переменную $a.

0 голосов
/ 25 марта 2020
function somefunc($a, $b, $c, $d, $e, $f, $g) {
    $args = array_map('mb_strtolower', func_get_args());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...