私はこの次のコードを持っています:
foreach ($animals as $animal) { $animal = getOffSpring($animal); }
$ animalを新しい文字列に設定しているので、配列も変更しますか?
私の実行では、配列は同じままであることが示唆されていますが、新しい値で変更する必要があります。これはバグですか?
言い換えれば、配列内のすべての動物を子孫に変更する必要があります
あなたはそれをやろうとしていると思います。
変数を取得$animal
して関数に渡すか、foreach
ループ内で変更すると、独立変数を操作します。これは、$animals
配列にリンクされていないため(自分でリンクしない場合)、すべての変更が適用されます。$animals
アレイが変更されないようにしてください。
foreach ( $animals as $i => $animal )
{
$animals[ $i ] = getOffSpring( $animal );
}
@AlecTMHが彼のコメントで述べたように、これarray_map
も解決策です。
array_map( 'getOffSpring', $animals );
参照を使用できます:
foreach ($animals as &$animal) {
$animal = getOffSpring($animal);
}
unset($animal);
unset
afterループは参照をクリアします。それ以外の場合は、ループの後に最後の配列要素への参照を保持します。$animal
これを忘れて、$animal
後で別の目的で使用すると、厄介な問題が発生します。
別のオプションは、キーを使用してキーを置き換えることです。
foreach ($animals as $key => $animal) {
$animals[$key] = getOffSpring($animal);
}
配列内の値への参照を使用できます
foreach ($animals as &$animal) {
$animal = getOffSpring($animal);
}