前提・実現したいこと
現在、phpで西暦から十二支を求める問題を解いています。
漢字で返す時と、アルファベットで返す時の2パターンの文字列で返す関数を作成しました。
第二引数にはbool値の型宣言を指定し、trueの場合は漢字で返し、falseの場合は、アルファベットで返すのが条件です。
現在は、アルファベットの返り値でどんな西暦でもtoriと出力されてしまいます。(漢字は問題なく表示できています。)
なので、西暦にあったアルファベットを出力できる様にしたいです。
2000年なら、辰年なので「tatu」と出力したいです。
ご教授していただけたら幸いです。
該当のソースコード
php
1<?php 2function eto(int $seireki, bool $hantei): string 3{ 4 try { 5 $kanji = array("申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"); 6 $alphabet = array("saru","tori","inu", "inosisi", "nezumi", "usi", "tora", "usagi", "tatu", "hebi", "uma", "hituji"); 7 8 9 $listKanji = $seireki - floor($seireki / 12) * 12; 10 $listAlphabet = $hantei - floor($hantei / 12)*12; 11 12 $zyuniKanji = $kanji[$listKanji]; 13 $zyuniAlphabet = $alphabet[$listAlphabet]; 14 15 if(!preg_match("/^[1-9][0-9]{0,3}$/", $seireki)){ 16 echo "error"; 17 throw new Exception(''); 18 } elseif($hantei === false) { 19 return $zyuniKanji; 20 } else { 21 return $zyuniAlphabet; 22 } 23 24 } catch (Exception $e) { 25 return ''; 26 } 27} 28 29print_r(eto(2000,true)."\n"); 30print_r(eto(2000,false)."\n"); 31print_r(eto(-2000,false)."\n"); 32?>
//出力 tori //tatuと出力したい 辰 error
試したこと
boolの型指定を宣言しているので、これだと、true,falseで判定するので最初の「saru」,「tori」しか出力されないのかと思いboolの型指定しないでやってみたのですがうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/17 04:41
2021/10/17 04:54
2021/10/17 05:03
2021/10/17 05:18
2021/10/17 05:32
2021/10/17 05:34
2021/10/17 05:39