PHPでは、スタックはファーストインアンドアウトのデータ構造です(LIFO、最初のアウトで最後)。スタックでは、要素の追加と除去がスタックの上部から実行されます。スタックは、元に戻す操作、閲覧履歴など、ファースト後期(LIFO)ロジックを必要とするいくつかのシナリオを実装するためによく使用されます。PHPにはスタックデータ構造が組み込まれていませんが、配列を使用してスタック操作をシミュレートできます。
スタックの一般的な操作の中には、一般的な要件があります。スタックの上部要素を表示しますが、削除しないでください。これはPeek操作と呼ばれます。 PHPアレイの場合、 array_pop()関数を使用して上部要素をポップアップできますが、 Peek操作の目的は、スタック自体の状態を変更せずにスタックの上部要素のみを表示することです。
Arrayの最後の要素を返すEnd()と呼ばれるPHPには非常に有用な機能があります。それを使用して、スタックにピーク操作を実装できます。特定の実装方法を見てみましょう。
最初にシンプルなスタックをシミュレートし、PHPアレイを使用してスタックの動作をシミュレートします。
<?php
// スタックを初期化します
$stack = [];
// スタック動作します
array_push($stack, 'first');
array_push($stack, 'second');
array_push($stack, 'third');
// 出力スタックのステータス
print_r($stack);
?>
コードを実行すると、出力は次のとおりです。
Array
(
[0] => first
[1] => second
[2] => third
)
この時点で、スタックの最上位要素は「3番目」です。
PEEK操作を実装するには、 END()関数を使用できます。 end()関数は、配列の最後の要素、つまりスタックの上部要素を返します。
<?php
// Peek 動作します:スタックの上部要素を表示します
$top = end($stack);
// 出力スタックトップ要素
echo "スタックの最上位の要素はです: " . $top . PHP_EOL;
?>
出力は次のとおりです。
スタックの最上位の要素はです: third
end()関数は、配列の内部ポインターを最後の要素に移動しますが、要素を削除しません。したがって、ピーク操作を実行した後、スタックは変更されません。この機能は、スタックの上部にある要素を表示するだけで、スタックを変更したくないため、スタック構造でのピーク操作に非常に適しています。
空のスタックの場合:スタックが空の場合、 end()はfalseを返します。したがって、 end()を使用する前に、エラーを避けるためにスタックが空であるかどうかを確認するのが最善です。
<?php
if (!empty($stack)) {
$top = end($stack);
echo "スタックの最上位の要素はです: " . $top . PHP_EOL;
} else {
echo "スタックは空です,実行できません peek 動作します。" . PHP_EOL;
}
?>
配列の内部ポインター: end()関数は配列の内部ポインターを変更しますが、スタック操作の場合、内部ポインターの変更はスタックの他の操作に影響しません(スタックエントリ、スタック出口など)。
スタックエントリ、スタック出口、ピーク操作を含む完全な例コードを次に示します。
<?php
// スタックを初期化します
$stack = [];
// スタック動作します
array_push($stack, 'first');
array_push($stack, 'second');
array_push($stack, 'third');
// Peek 動作します:スタックの上部要素を表示します
if (!empty($stack)) {
$top = end($stack);
echo "スタックの最上位の要素はです: " . $top . PHP_EOL;
} else {
echo "スタックは空です,実行できません peek 動作します。" . PHP_EOL;
}
// 出栈動作します:スタックの上部要素を削除します
$removed = array_pop($stack);
echo "削除された要素はです: " . $removed . PHP_EOL;
// Peek 動作します:再次スタックの上部要素を表示します
if (!empty($stack)) {
$top = end($stack);
echo "スタックの最上位の要素はです: " . $top . PHP_EOL;
} else {
echo "スタックは空です,実行できません peek 動作します。" . PHP_EOL;
}
?>
出力結果:
スタックの最上位の要素はです: third
削除された要素はです: third
スタックの最上位の要素はです: second
end()関数を使用することにより、スタックのピーク操作を簡単に実装し、スタックの状態を変更せずにスタックの上部に要素を表示できます。この方法はシンプルで効率的であり、PHPのスタックデータ構造をシミュレートするシナリオに非常に適しています。