2016-12-27 82 views
0

我有一个名为$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而不是既作为在所希望的结果,这是:

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

如果我由值每个值输入到阵列中的结果是COR但是我后来面临一个问题,所以这不是一个选项。我如何修改我的代码,以便产生所需的结果?

+0

你应该避免使用参考尽可能传递的变量。随着应用程序的增长它可以给你很多麻烦.. –

+1

我与你对@MateiMihai,但该特定功能是内置的并需要参考。这是在我的手中;) –

回答

2

在你的foreach循环中使用一个索引。 这应该工作:

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

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

意想不到的想法@crystalAhmet。 Upvoted!万分感谢! –