PHP foreachの抜粋

WBOY
リリース: 2016-06-13 13:18:30
オリジナル
891 人が閲覧しました

PHP foreach 引用

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="php" name="code"><?php

$a = array(
	'str1' => 'val1',
	'str2' => 'val2',
	'str3' => 'val3',
	'str4' => 'val4',
);

$b = array(
	'str1', 
	'str2',
	'str3',
	'str4',

);

foreach ($b as &$val) {
	$val = $a[$val];
}

unset($val);

foreach ($b as $val) {
	echo "-----$b[3]";
	echo $val."\n";
}




?>
ログイン後にコピー
ログイン後にコピー

'val1','str2' => 'val2','str3' => 'val3','str4' => 'val4',) ;$b = array('str1', 'str2','str3','str4',);foreach ($b as &$val) {$val = $a[$val];}foreach ($b as &$val) $val) {echo "-----$b[3]";echo $val."n";}?>
ログイン後にコピー

出力:

-----val1val1
-----val2val2
-----val3val3
-----val3val3


最初の foreach の最後の $[2] 参照が閉じられていないため、アドレスがすでに 2 番目の foreach に継続的に書き込まれていることがわかります。

これは、$b[2] の値を出力することで確認できます。 foreach が実行されると、$b[2] の値は常に変化します。この結果、foreach が $b[1] に対して実行されると、$b[2] の値は

になります。

$b[1] と等しい場合、最後の実行では、$b[2] = $b[2] は、結果が $b[1] と同じであることを意味します

解決策:

unset () メソッドを使用して参照変数を解放し、2 番目の foreach ループを実行します。

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="php" name="code"><?php $a = array( 'str1' => 'val1', 'str2' => 'val2', 'str3' => 'val3', 'str4' => 'val4', ); $b = array( 'str1', 'str2', 'str3', 'str4', ); foreach ($b as &$val) { $val = $a[$val]; } unset($val); foreach ($b as $val) { echo "-----$b[3]"; echo $val."\n"; } ?>
ログイン後にコピー


出力結果:

-----val4val1
-----val4val2
-----val4val3
-----val4val4

オプション 2 (あまり良くありません):

<?php

$a = array(
	'str1' => 'val1',
	'str2' => 'val2',
	'str3' => 'val3',
	'str4' => 'val4',
);

$b = array(
	'str1', 
	'str2',
	'str3',
	'str4',

);

foreach ($b as &$val) {
	$val = $a[$val];
}

// unset($val);

foreach ($b as $item) {
	echo "-----$b[3]";
	echo $item."\n";
}




?>
ログイン後にコピー

2 番目の foreach のように変数を置き換え、参照された変数を使用しない場合、この状況は発生しません。

出力:

-----val4val1
-----val4val2
-----val4val3
-----val4val4

まとめ: 参照後は unset() を使用して解放することを推奨します。

関連ラベル:
ソース:php.cn
前の記事:不思議な現象 定数の生成過程 次の記事:PHP の無制限の分類ツリー データ形式
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート