0

假设我们有这个字符串数组:

$arrString = ["1", "2", "3"];

将值转换为整数的一种传统方法如下:

foreach ($arrString as $key => $value)
    $arrString[$key] = (int) $arrString[$key];

echo var_dump($arrString);

这输出:

array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }

很期待。但是,我相信使用参考是完成相同工作的更快方法:

foreach ($arrString as &$strValue)
    $strValue = (int) $strValue;

 echo var_dump($arrString);

猜猜它输出什么?

array(3) { [0]=> int(1) [1]=> int(2) [2]=> &int(3) }

也就是说,它将最后一个值分配为对 int 的引用。当在循环中使用引用时(即使只有一个元素),这总是发生在最后一个元素上,而且无论我使用 (int) cast 还是 PHP 的 settype- 和 intval 函数,它也会发生。

它打败了我;为什么会这样?我真的应该关心吗?

4

1 回答 1

3

您应该关心,并且在此之前已在 SO 上多次解释过(并且 PHP 文档中有明确的警告)

unset($strValue);

循环之后

请参阅此处以获取说明

编辑

参考

带引号:

警告

即使在foreach循环之后,对$value和最后一个数组元素的引用仍然存在。建议通过 unset() 将其销毁。

于 2012-05-28T16:38:10.967 回答