sukechan.net
「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」を PHP で解いてみる【第 5 回】
- 2008-06-08 (日)
- PHP
新しくプログラミング言語を覚えたいときに行うべき10の練習問題の第 5 問を解いてみます。今回のお題はこちら。
5.キーワードを入れてYahoo!の検索結果を出力。
このお題には、Yahoo! が提供しているウェブ検索の API を使いました。
API を使うには、事前にアプリケーション ID を登録する必要があります。
指定された URL にリクエストを投げると、結果が XML で返ってくるので、SimpleXML で読み込んで検索結果を表示しています。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<title>yahoo search sample</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<form method="GET" action="069_phpstudy_05.php">
<input type="text" name="query" length="30" value="<?php print($_GET['query']) ?>" />
<input type="submit" value="検索" />
</form>
<?php
if(isset($_GET['query']) && strlen($_GET['query']) > 0) {
// appid には登録した ID を指定する
$url = 'http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=(appid)&query='.urlencode($_GET['query']);
$xml = simplexml_load_file($url);
if($xml) {
print('<p>"'.htmlspecialchars($_GET['query']).'" で検索した結果 : '.number_format($xml['totalResultsAvailable']).'件</p><hr />');
print('<ol>');
foreach($xml->Result as $result) {
print("<li><a href='$result->ClickUrl'>$result->Title</a><br />");
print($result->Summary);
print('</li>');
}
print('</ol>');
}
}
?>
</body>
</html>
参考リンク
- Comments: 0
- Trackbacks: 0
「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」を PHP で解いてみる【第 4 回】
- 2008-06-07 (土)
- PHP
新しくプログラミング言語を覚えたいときに行うべき10の練習問題の第 4 問を解いてみます。今回のお題はこちら。
4.簡易電卓。0で割ったときの処理を自分なりに作りこむ。
この問題をどうやって実装しようかと悩んでたのですが、数値を入力するエリア 2 つと演算子を選択するだけのシンプルなフォームにしてみました。
計算を行っているのは calc 関数。
まず、最初にアクセスした時は $_GET は空なので、isset() 関数を使って値がセットされているかどうかを確認します。
値がセットされていてその値が数値の場合は、選択された演算子で計算し、計算結果を左側のエリアにセットします。
割る数が 0 の場合は、計算せずに元の値をそのままセットしています。
caution 関数は、入力された値が間違っている場合(0 で割ろうとした場合も含む)にエラーメッセージを表示しています。
<?php
function calc() {
if(isset($_GET['op'], $_GET['v1'], $_GET['v2'])) {
if(is_numeric($_GET['v1']) && is_numeric($_GET['v2'])) {
switch($_GET['op']) {
// 加算
case '1':
print($_GET['v1'] + $_GET['v2']);
break;
// 減算
case '2':
print($_GET['v1'] - $_GET['v2']);
break;
// 乗算
case '3':
print($_GET['v1'] * $_GET['v2']);
break;
// 除算
case '4':
// 0の場合は割らない
if($_GET['v2'] != '0') {
print($_GET['v1'] / $_GET['v2']);
} else {
print($_GET['v1']);
}
break;
}
} else {
print($_GET['v1']);
}
}
}
function caution() {
if(isset($_GET['op'], $_GET['v1'], $_GET['v2'])) {
if(is_numeric($_GET['v1']) && is_numeric($_GET['v2'])) {
if($_GET['op'] == '4' && $_GET['v2'] == '0') {
print('0では割れません。<br />');
}
} else {
print('半角数値を入力してください。<br />');
}
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<title>sukechan.net: 「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」第 4 回のサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<form method="GET" action="068_phpstudy_04.php">
<input type="text" name="v1" size="10" value="<?php calc(); ?>" />
<select name="op">
<option value="1" selected="selected">+</option>
<option value="2">−</option>
<option value="3">×</option>
<option value="4">÷</option>
</select>
<input type="text" name="v2" size="10" value="" />
<br />
<?php caution(); ?>
<input type="submit" value="計算" />
</form>
</body>
</html>
参考リンク
- Comments: 0
- Trackbacks: 0
「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」を PHP で解いてみる【第 3 回】
- 2008-06-07 (土)
- PHP
第 1 回、第 2 回に続き、今回は第 3 問。問題はこちら。
3.複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す(例:同僚の体重を入力して計算)。
フォームに名前と体重を 3 つずつ用意し、POST でデータを受け取って、名前をキーにした連想配列に格納。その連想配列を asort 関数でソートして MAX と MIN を表示しています。
あと一応、受け取った側で入力チェックもしてあります。
<?php
for($i = 1; $i <= 3; $i++) {
if(strlen($_POST['name'.$i]) == 0) {
print($i.'番目の名前を入力してください。');
return;
}
if(!is_numeric($_POST['weight'.$i])) {
print($i.'番目の体重の入力が間違っています。');
return;
}
}
$data = array(
htmlspecialchars($_POST['name1']) => htmlspecialchars($_POST['weight1']),
htmlspecialchars($_POST['name2']) => htmlspecialchars($_POST['weight2']),
htmlspecialchars($_POST['name3']) => htmlspecialchars($_POST['weight3'])
);
asort($data, SORT_NUMERIC);
$keys = array_keys($data);
$values = array_values($data);
print('最も体重が重いのは・・・ '.$keys[count($keys) - 1].' : '.$values[count($values) - 1].'<br />');
print('最も体重が軽いのは・・・ '.$keys[0].' : '.$values[0].'<br />');
?>
参考リンク
- Comments: 0
- Trackbacks: 0
「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」を PHP で解いてみる【第 2 回】
- 2008-06-03 (火)
- PHP
前回のエントリ、「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」を PHP で解いてみる【第 1 回】の続き。今度は第 2 問。
2.現在時刻にあわせてやる気のでるメッセージを出力(例:もうすぐランチ!がんばれ!)。
以下ソース。24時間分のメッセージを配列に入れて、現在時刻を配列の要素位置に入れるだけ。
何もひねりが無いですが。24個のメッセージを考えるのがいちばん大変でしたw
<?php
$msg = array(
'0時です。そろそろお休みですか?',
'1時です。まだ起きてるんですか?',
'2時です。夜更かしですか?',
'3時です。徹夜ですか?',
'4時です。徹夜ですか?それとももう起きたんですか?',
'5時です。おはようございます。早起きですね。',
'6時です。ラジオ体操でもしますか?',
'7時です。今日も1日がんばりましょう。',
'8時です。会社に行く時間ですね。いってらっしゃい。',
'9時です。出社しましたか?今日もお仕事がんばって。',
'10時です。お仕事は順調に進んでますか?',
'11時です。もうちょっとで昼休みですよ。がんばって。',
'12時です。お昼ごはんは食べましたか?',
'13時です。午後のお仕事開始ですね。がんばって。',
'14時です。ちょっと眠くなってきましたか?気分転換でもしてみては?',
'15時です。おやつの時間ですね。',
'16時です。もう一息!',
'17時です。そろそろ今日のお仕事終わりですね。',
'18時です。今日もお仕事お疲れさまでした。',
'19時です。ビールでも飲みながら野球中継とかどうですか?',
'20時です。晩ご飯は食べましたか?',
'21時です。晩酌でもどうですか。',
'22時です。お風呂は入りましたか?',
'23時です。良い子はそろそろ寝る時間ですね。'
);
$d = (int)date('H');
print($msg[$d]);
?>
- Comments: 0
- Trackbacks: 0
「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」を PHP で解いてみる【第 1 回】
- 2008-05-30 (金)
- PHP
suniti さんの「blog.grayash.com - 第0回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみよう!」というエントリーに感化されて、IDEA * IDEA の「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」というエントリーで書かれている練習問題を PHP で解いてみることにします。
全部で10問ありますが、まずは第 1 問。世界のナベアツですねw
1.「なんらかのカウントアップメッセージを1から100まで出すけど、3のときだけアホになる!(例:1万円!2万円!しゃ~ん万円!とか)」。
で、解いてみました。
<?php
$aho10 = array ('', 'じゅー', 'ぬぃじゅ', 'さぁんじゅ', 'よぉんじゅ', 'ごぉじゅ', 'ろくぅじゅ', 'ななじゅ', 'はぁちじゅ', 'きゅーじゅ');
$aho1 = array ('', 'いっち', 'ぬぃー', 'さぁーん', 'よぉーん', 'ごぉー', 'ろくー', 'しぃっち', 'はぁっち', 'きゅー');
for ($i = 1; $i <= 100; $i++) {
if ($i % 3 == 0 || strpos((string)$i, '3') !== false) {
print ($aho10[(int)($i / 10)].$aho1[$i % 10].'<br />');
} else {
print ($i.'<br />');
}
}
?>
引っかかったところは、strpos 関数で 3 があるかどうか調べるところ。
当初 strpos((string)$i, ‘3′) >= 0 という条件にしたのですが、3 が見つからなかった場合でもこの条件が true になってしまいました。
調べた結果、false が 0 として判断されたためだと分かったので、!== 演算子を使って見つかったかどうかを判断するようにしました。
参考リンク
- Comments: 1
- Trackbacks: 0
- Search
- Feeds
- Meta
- あわせて読みたい
- Others...

