通过引用将值传递到数组中的问题

时间:2016-12-27 14:07:16

标签: php arrays pass-by-reference

我有一个名为 $initValues 的数组,其中包含字符串或数值,并使用 foreach 循环我要将值传输到 $values 数组以及 $types 的每个值的类型。

代码:

$initValues = ["1-2", "2-1"];
$values = [];
$types = [];

foreach ($initValues as $value) {
    $values[] = &$value; # by reference.
    $types[] = gettype($value);
}

正如您在上面的代码中所看到的,我在 $values 中插入了值,这是稍后使用的函数所必需的,因此可以&# 39;不要改变。当我执行上述代码并使用 var_dump($values) 显示结果时,我会得到以下内容:

array(2) { [0]=> &string(3) "2-1" [1]=> &string(3) "2-1" }

上述结果的问题在于, $values 数组的两个元素基本上都是 $initValues 的最后一个元素,而不是两者都是在期望的结果中,这是:

array(2) { [0]=> &string(3) "1-2" [1]=> &string(3) "2-1" }

如果我按值将每个值输入到数组中,结果是正确的,但我稍后会遇到问题,因此这不是一个选项。如何修改我的代码,以产生所需的结果?

1 个答案:

答案 0 :(得分:2)

在foreach循环中使用索引。 这应该有效:

$initValues = ["1-2", "2-1"];
$values = [];
$types = [];

foreach ($initValues as $ix=>$value) {
    $values[] = &$initValues[$ix]; 
    $types[] = gettype($value);
}
var_dump($values);