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

Issue with passing values by reference into an array

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

代码:

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

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

正如你在上面的代码中看到的,我在 $values 中通过引用插入值,这是稍后使用的函数所需要的,所以那是无法改变的。当我执行上面的代码并使用 var_dump($values) 显示结果时,我得到以下信息:

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

上述结果的问题在于,我的 $values 数组的两个元素本质上都是 $initValues[ 的最后一个元素=40=] 而不是两者都如预期的结果那样,即:

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

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

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

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

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