Скажем, у нас есть этот массив строк:
$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.
Это бьет меня; Почему это происходит? И я действительно должен заботиться?
array_walk($arr, 'intval');
- person goat   schedule 28.05.2012