ホームページ  >  記事  >  バックエンド開発  >  PHP foreachの抜粋

PHP foreachの抜粋

WBOY
WBOYオリジナル
2016-06-13 13:18:30872ブラウズ

PHP foreach 引用

<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";
}




?>

6ceb71b56a3b854660cdc12e9edebe8e '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 ループを実行します。

<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() を使用して解放することを推奨します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。