2

有没有办法用一个增量运算符发布或每次增量多个变量。我有 4 个值,我需要增加一个值

$a = 1; $b = 3; $c = 45; $d = 10;

通常我们使用这种方法,而不是像这样单独增加它们

++$a; ++$b; ++$c; ++$d;

我可以做一些事情,比如将它们封装在括号中,然后对它们全局执行增量吗

++($a, $b, $c, $d);

我已经尝试过上述说法,但它不起作用。

4

5 回答 5

4

您可以将array_map与引用变量数组一起使用

array_map(function(&$var){  $var++; }, array(&$a, &$b, &$c, &$d));
于 2013-08-01T18:12:28.007 回答
2

您可以编写一个通过引用获取参数的函数:

function inc_all(&$arg1, &$arg2 = 0, &$arg3 = 0, &$arg4 = 0) {
    $arg1++;
    $arg2++;
    $arg3++;
    $arg4++;
}

inc_all($a, $b, $c, $d);

您需要为函数编写一次需要增加的最大变量数,因为不可能通过引用传递给func_get_args用于处理任意长度参数列表的函数。

于 2013-08-01T18:12:42.527 回答
1

不,那是不可能的。您只需要浪费额外的语句来逐一递增它们。

适用于其他情况的是您可以一次设置多个值。例如,
$a = $b = $c = 10;将 $a、$b 和 $c 都设置为 10。

于 2013-08-01T18:08:06.440 回答
1

从 php 5.6 开始,可以在一个函数中使用可变参数并处理可变数量的参数:

function increment(&...$arguments)
{
    foreach($arguments as &$arg){
        ++$arg;
    }
}
increment($a);
increment($b, $c);
increment($x, $y, $z);

原答案:

另一个例子,没有参考:

extract(array_map(function($v){return ++$v;}, compact(array('a','b','c','d'))));
于 2013-08-01T18:36:56.100 回答
-1

使用此代码的帮助,我设法制作了此答案的稍微动态的版本

这是一个相当麻烦的工作,但这个例子最多可以处理 9 个参数。

// Workaround from
// http://www.php.net/manual/en/function.func-get-args.php#110030
function func_get_args_byref() {
    $trace = debug_backtrace();
    return $trace[1]['args'];
}

// ``&x=0'', required to pass arg as reference
// You can increase the amount of maximum arguments by adding ``&$x=0''
function inc( &$x=0,&$x=0,&$x=0,&$x=0,&$x=0,&$x=0,&$x=0,&$x=0,&$x=0 ) {
    $arguments = func_get_args_byref();
    foreach ($arguments as &$arg) ++$arg;
}

$a = 0; $b = 3; $c = 45; $d = 10;

inc($a, $b, $c, $d); // a = 1, b = 4, c = 46, d = 11
inc($b, $d);         // a = 1, b = 5, c = 46, d = 12
inc($c, $d);         // a = 1, b = 5, c = 47, d = 13
inc($a, $a, $c);     // a = 3, b = 5, c = 48, d = 13
于 2013-08-01T18:44:44.650 回答