有没有办法用一个增量运算符发布或每个增量多个变量。 我有4个值,我需要增加一个值
$a = 1; $b = 3; $c = 45; $d = 10;
通常我们使用此方法,而不是像
那样单独递增它们++$a; ++$b; ++$c; ++$d;
我可以做一些事情,比如将它们封装在括号中,然后全局执行增量
++($a, $b, $c, $d);
我已经尝试过上述声明,但它不起作用。
答案 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