PHP:配列を2つ用意して、ブラウザのページ遷移の仕組みを真似てみた。

今回のネックは、

戻るボタンを2回以上押して、他のページに飛び、
また、戻るボタンを押した時のページ遷移先を表現すること

上記の問題を解決するのに、配列を2つ用意した。

イメージ:末尾が現在地

1回目:
$result = [1, 2, 3, 4, 5, 6]
$result2 =  [1, 2, 3, 4, 5, 6] <- 末尾を削除する配列

戻るボタンを押した!
$result = [1, 2, 3, 4, 5, 6, 5]
$result2 =  [1, 2, 3, 4, 5]

2回目:
$result = [1, 2, 3, 4, 5, 6, 5, 7]
$result2 =  [1, 2, 3, 4, 5, 7]

戻るボタンを押した!
$result = [1, 2, 3, 4, 5, 6, 5, 7, 5]
$result2 =  [1, 2, 3, 4, 5]

戻るボタンを押した!
$result = [1, 2, 3, 4, 5, 6, 5, 7, 5, 4]
$result2 =  [1, 2, 3, 4]

3回目:
$result = [1, 2, 3, 4, 5, 6, 5, 7, 5, 4, 8]
$result2 =  [1, 2, 3, 4, 8]
配列を2つ用意して、2つともページ遷移後のページ名を格納する。
ただし、1つの配列は、use the back button(戻るボタンのクリック) 時、末尾の値を削除する。
そして、その配列の新しい最後の値を別の配列の末尾に追加する(前のページに戻る)。
*/
    $n = (int) trim(fgets(STDIN));
    // 全てのクエリを持つ配列。$queryArr
    $queryArr = [];
    // 答えになる、ページ名を格納していく、配列。初期値は、'blank page'になる。
    $resultArr = ['blank page'];
    // こちらの配列は、back btn がでてきたら、最後の要素を削除する。
    $resultArr2 = ['blank page'];
    // $n === 1 なら、即終了。
    if ($n === 1) {
        echo 'blank page';
        die();
    }
    
    for ($i = 0; $i < $n; $i++) {
        $queryArr[] = trim(fgets(STDIN));
    }
    
    // $n === 2 の時も、すぐに回答が作れる.
    if ($n === 2) {
        $secondePage = 1;
        $secondePageName = judgePageName($queryArr, $secondePage);
        echo 'blank page' . PHP_EOL;
        echo $secondePageName;
        die();
    }
    
    // 作業回数を数えとく、変数 $count を作る。
    // 初期値が固定値であり、2つめのクエリが、必ず、blank page 以外のページになるため
    // $count = 1から始める。$count === $n - 1 になったら、終了。
    $count = 1;
    
    // 1つ前のページに戻るか判断する
    for($i = $count; $i < $n; $i++) {
        if (reset(explode(' ', $queryArr[$i])) === 'use') {
            array_pop($resultArr2);
            // 1つ前のページ名を$resultArr に格納する
            $resultArr[] = end($resultArr2);
            $count++;
        } else {
            $pageName = judgePageName($queryArr, $i);
            $resultArr[] = $pageName;
            $resultArr2[] = $pageName;
            $count++;
        }
    }
    
    function judgePageName(array $queryArr, int $count): string
    {
        // 3つ目の要素以降を取得する。それが、ページ名になる
        $startIndex = 2;
        $slicedArr = array_slice(explode(' ', $queryArr[$count]), $startIndex);
        $pageName = implode(' ', $slicedArr);
        return $pageName;
    }
    
    foreach ($resultArr as $v) {
        echo $v . PHP_EOL;
    }

reset() :配列の最初の値を取り出す関数。

p.s. クラスを使っていきたい。クラスの基本的な動作を理解したが、操作できるレベルに到達したい。。