実現したいこと
foreach
について、 $key => $value
とその前後で、同じ変数名を干渉せずに使う方法を知りたいです。
発生している問題
以下foreach
によって$kind
の値が壊れてしまいます。
$kind(1)
は「a」でいいのですが、foreach
以後の$kind(2)
が「b」になってしまうのです。
php
1define( 'KINDS', [ 1=>'a', 2=>'b' ] ); 2$arg = [ 'kind' => 'a' ]; 3$kind = $arg['kind']; 4var_dump('$kind(1) = ' . $kind); // a が取得できる 5 6foreach( KINDS as $kind_id => $kind ){ 7 // $kindを用いて色々な処理をする 8} 9var_dump('$kind(2) = ' . $kind); // b になってしまう
試したこと
define( 'KINDS', [ 1=>'a', 2=>'b' ] );
を
define( 'KINDS', [ 1=>'a', 2=>'b', 3=>'c' ] );
にすると
最後の$kind(2)
が「c」になりましたので、foreach
の最後の値のまま、それ以後も引き継がれてしまうという現象に思えます。
参照渡しのときのようにforeach
の後にunset($kind);
を書いてもエラーですし、どうしたらいいでしょうか?
ちなみに、foreach( KINDS as $kind_id => $kind )
ではなく、foreach( KINDS as $kind_id => $x )
などにすればforeach
以後の$kind
に引き継がれず問題は解決します。
しかしこうしないで同じ変数名を使いたいのです。(foreach
の中で使うのも$kind
なのに、なんで$x
などという別の変数にしなければならないのか納得がいかないので…)
回答3件
あなたの回答
tips
プレビュー