0

この文字列の配列があるとします。

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

値を整数に変換する従来の方法の1つは、次のようなものです。

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への参照として最後の値を割り当てました。これは、ループで参照を使用するときに常に最後の要素に発生します(要素が1つしかない場合でも)。また、(int)キャストまたはPHPのsettype-およびintval関数を使用する場合にも発生します。

それは私を打ち負かします。なぜこうなった?そして、私は本当に気にする必要がありますか?

4

1 に答える 1

3

あなたは気にする必要があり、これまでSOで何度も説明されてきました(そして、PHPのドキュメントには明示的な警告があります)

行う

unset($strValue);

ループの後

解説こちら

編集

参照

引用付き:

警告

$valueと最後の配列要素の参照は、 foreachループの後でも残ります。unset() で破棄することをお勧めします。

于 2012-05-28T16:38:10.967 に答える