【クラス・構造体メニュー】> 【構造体の更新】STEP: 2 構造体の検索 (paizaランク C 相当) [難易度: 1417 ±13]
※リンク先へ移動するためには[paiza]へのログインが必要です。
クラスの学級委員である paiza 君は、クラスのみんなに次のような形式でアカウントの情報を送ってもらうよう依頼しました。
名前 年齢 誕生日 出身地
送ってもらったデータを使いやすいように整理したいと思った paiza 君はクラス全員分のデータを次のような構造体でまとめることにしました。
student{
name : 名前
old : 年齢
birth : 誕生日
state : 出身地
}
年齢ごとの生徒の名簿を作る仕事を任された paiza 君はクラスメイトのうち、決まった年齢の生徒を取り出したいと考えました。
取り出したい生徒の年齢が与えられるので、その年齢の生徒の名前を出力してください。
入力値(例)
1
koko 23 04/10 tokyo
23
出力値(例)
koko
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php // Studentというクラス(型)を宣言。クラスの1文字目は大文字 class Student { // プロパティ public $name; public $old; public $birth; public $state; // メソッド function showData(){ } } //クラスStudentのインスタンスを作成 $deta = new Student; $n = trim(fgets(STDIN)); for($i=0; $i<$n; $i++) { list($name, $old, $birth, $state) = explode(" ", trim(fgets(STDIN))); $student[] = array("name"=>$name, "old"=>$old, "birth"=>$birth, "state"=>$state); } $k = trim(fgets(STDIN)); $key = array_search($k, array_column($student, "old")); print_r($student[$key]["name"]); ?> |
解説
連想配列の値からキーを取得する array_search() を使用しました。
第一引数に検索したい文字列、第二引数に連想配列を入れます。
1 2 3 4 5 6 7 8 |
<?php $fruits = array( "apple" =>"リンゴ", "grape" =>"ブドウ", "orange"=>"オレンジ"); echo array_search("リンゴ", $fruits); //apple ?> |
array_search()の注意点としては、
1)値に対してキーが存在しない場合は false が返ってきます。
1 2 3 4 5 6 7 8 |
<?php $fruits = array( "apple" =>"リンゴ", "grape" =>"ブドウ", "orange"=>"オレンジ"); echo array_search("メロン", $fruits); //false ?> |
2)同じ値が二つ以上ある場合
同じ値が二つ以上ある場合は、最初に見つかったキーを返します。
1 2 3 4 5 6 7 8 9 |
<?php $age = array( "taro" => 14, "jiro" => 15, "yuko" => 20, "hanako"=> 14); echo array_search(14, $age); //taro (一番最初に見つかったキーが返る ?> |
多次元の連想配列なので、第二引数に array_column() を使っています。