正如评论中提到的,我不清楚为什么您希望代码以相同的方式对多个变量进行操作,而不能简单地将它们视为(关联)值数组。
因此,我不建议将此代码作为任何人使用的模式。但是,您正在寻找的可以使用references来实现。在 PHP 中通过引用赋值意味着让两个变量指向同一个东西——一个不是对另一个的引用,它们都是对一块未命名的内存的引用。
在您的情况下,您需要这样做两次:首先,当您将单独的变量放入临时数组时,您希望该数组包含对这些相同变量的引用,而不仅仅是它们的值。其次,foreach
(or array_walk
, etc) 也将从数组中获取值,除非您使用适当的语法通过引用显式分配。
因此,在原始代码中的适当位置撒上&
,你会得到:
$a = 'true';
$b = 'false';
$c = 'true';
// $a, $b, $c are strings containing 'true' or 'false'
// Step 1: make an array whose elements are joined as references to $a, $b, $c
$arr = array(&$a, &$b, &$c);
// Step 2: loop over the array, taking a reference to each of its elements, not just the values
foreach ($arr as &$value) {
if ($value == "false") {
$value = 0;
}
elseif ($value == "true") {
$value = 1;
}
}
// Step 2b: after looping by reference, $value will still refer to one of the variables in the array
// this is often a cause of bugs later, so unsetting it is a good habit
unset($value);
// Did it work?
echo "A: $a; B: $b; C: $c";
这是一个现场演示,显示输出为“A:1;B:0;C:1”。
再说一遍,在我看来,像这样大量使用引用通常不是一个好的编码模式,因为它使代码难以遵循和调试。