ここから本文です

投票受付終了まであと2日 ベストアンサーにふさわしい回答に投票してください

投票すると知恵コイン5枚プラスされます。

PHPについて質問です。 現在、paizaラーニングの練習問題にて学習を進めており...

yus********さん

2019/11/2312:00:04

PHPについて質問です。

現在、paizaラーニングの練習問題にて学習を進めております。
その中で、下記の問題がどうしてもわからず、もやもやしている状況です。

答えと考えかたを教えていただきたいと思います。
ーーーーーーーーーーーーーーーーー
あなたが利用しているブラウザでは検索ワードの履歴を見ることができません。あなたは検索ワードの履歴を見られないのは不便だと思ったので、検索ワードの履歴を見る機能を自分でつくることにしました。

検索ワードの履歴とは次のようにつくられます。

検索ワード W が以前に入力されたことがある場合:
履歴中の W を削除する。
履歴の先頭に W を追加する。
検索ワード W が以前に入力されたことがない場合:
履歴の先頭に W を追加する。

検索ワード W が N 個与えられるので、N 個の検索ワードが与えられた後の履歴を表示するプログラムを書いてください。

入力例1
5
book
candy
apple
book
candy

出力例1
candy
book
apple
ーーーーーーーーーーーーーーーーーーーーーーーーー
私がかいた途中のコードは、
<?php
// 自分の得意な言語で
// Let's チャレンジ!!

$num = trim(fgets(STDIN));
for($i=0; $i<$num; $i++){
$word[$i] = trim(fgets(STDIN));
}
for($e=0; $e<$num; $e++){

echo $word[$e]."\n";
}


お手数おかけいたしますが、ご教授の程お願いいたします。

閲覧数:
23
回答数:
1
お礼:
100枚

違反報告

回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

shimixさん

2019/11/2511:15:36

私なら、多分こんな感じで処理すると思う

<?php
// 入力データ
$input_data = ['book', 'candy', 'apple', 'book', 'candy'];
// データを逐次処理
$history = [];
foreach ($input_data as $word) {
// 先頭に追加
array_unshift($history, $word);
// 重複があれば削除
$history = array_unique($history);
}
// 結果確認
print_r($history);

実行速度とかphpの内部的な処理云々とかはあるかもしれないけど、結局「どうせ速くはない言語」なんだし、ソースがシンプルなら(内部的にはごちゃごちゃかもしれないけど)あとで見直すときも楽だと思う。

  • shimixさん

    2019/11/2511:22:22

    質問者さんが書かれたように、元データとして STDIN を扱うなら(コマンドラインから起動して入力を受け付けるなら)

    <?php
    $history = [];
    while ($word = trim(fgets(STDIN))) {
    array_unshift($history, $word);
    $history = array_unique($history);
    }
    print_r($history);

    といった感じでしょうか(入力が空文字列だったら終了)

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる