在多个值上增加运算符

时间:2013-08-01 18:06:02

标签: php post-increment

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

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

通常我们使用此方法,而不是像

那样单独递增它们
++$a; ++$b; ++$c; ++$d;

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

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

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

5 个答案:

答案 0 :(得分:4)

您可以使用array_map以及一系列引用变量

array_map(function(&$var){  $var++; }, array(&$a, &$b, &$c, &$d));

答案 1 :(得分:2)

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

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

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

您需要对函数进行编码以获得需要一次递增的最大变量数,因为不可能通过引用传递给使用func_get_args来处理任意长度参数列表的函数。

答案 2 :(得分:1)

不,那是不可能的。您将不得不浪费其他语句逐一递增它们。

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

答案 3 :(得分:0)

另一个例子,没有参考:

extract(array_map(function($v){return ++$v;}, compact(array('a','b','c','d'))));

答案 4 :(得分:0)

借助this code的帮助,我设法制作了更为动态的this answer

版本

这是一个非常hackjob,但这个例子可以解决多达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