<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>blog.grayash.com &#187; PHP</title>
	<atom:link href="http://blog.grayash.com/archives/category/web/php/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.grayash.com</link>
	<description>Webデザイナーによるブログ。日々勉強</description>
	<lastBuildDate>Fri, 29 Oct 2010 20:59:59 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.grayash.com/archives/category/web/php/feed" />
		<item>
		<title>第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</title>
		<link>http://blog.grayash.com/archives/754?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%25ac%25ac3%25e5%259b%259e%25e3%2580%258c%25e6%2596%25b0%25e3%2581%2597%25e3%2581%258f%25e3%2583%2597%25e3%2583%25ad%25e3%2582%25b0%25e3%2583%25a9%25e3%2583%259f%25e3%2583%25b3%25e3%2582%25b0%25e8%25a8%2580%25e8%25aa%259e%25e3%2582%2592%25e8%25a6%259a%25e3%2581%2588%25e3%2581%259f%25e3%2581%2584%25e3%2581%25a8%25e3%2581%258d</link>
		<comments>http://blog.grayash.com/archives/754#comments</comments>
		<pubDate>Sat, 31 May 2008 19:49:27 +0000</pubDate>
		<dc:creator>suniti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.grayash.com/?p=754</guid>
		<description><![CDATA[百式さんの運営するIDEA＊IDEAの「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」を実際にやってみる第3回目！ 今回の問題はこちら！ 複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す（例 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.100shiki.com/">百式</a>さんの運営する<a href="http://www.ideaxidea.com/">IDEA＊IDEA</a>の「<a href="http://www.ideaxidea.com/archives/2008/02/10_7.html">新しくプログラミング言語を覚えたいときに行なうべき10の練習問題</a>」を実際にやってみる第3回目！</p>
<p>今回の問題はこちら！</p>
<blockquote>
<ol>
<li>複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す（例：同僚の体重を入力して計算）。</li>
</ol>
</blockquote>
<p>今回は体重のソート（順番に並べる）ってことなので、<strong>第1関門はフォームから値を入力</strong>してもらう事、<strong>第2関門にソート</strong>する事。<br />
最初はあまり考えずに「体重だけじゃアレだなー」と思って「名前も一緒に入れよう！」と思ったのが運のツキ...めんどくさくなってしまった...</p>
<p>最初にHTMLのフォームからPOSTでデータを受け取る！<br />
これは$_POST["name1"] この1行で終わるので楽勝ですな。（name1はフォームのname属性の値）</p>
<p>次にソートなんだけど、名前を取得せずに体重だけを取得する場合はsort関数を使えばそんなに悩まずにすぐ出来ると思います。<br />
が、しかし！自分は$personという配列の中に3人のデータをさらに配列で作ってしまったのでめんどくさくなりました(´･ω･｀)</p>
<p>でも色々調べてみると<strong>array_multisort</strong>という関数があったので、$person配列からweightの値を$weightという新しい配列に移し、この$weight配列の数字の大きい順に$personも並び替えできました。</p>
<p>実際に動いているのはこちら<br />
<a href="http://labs.grayash.com/PHP_study/03.html">第3回目「新しくプログラミング言語を覚えたいときに行うべき10の練習問題　〜PHP編〜」</a></p>
<p>書いたコードはこちら</p>
<pre>
<code>
&lt;?php
//POST&#12391;&#21463;&#12369;&#21462;&#12387;&#12383;&#12487;&#12540;&#12479;&#12434;2&#27425;&#20803;&#37197;&#21015;&#12395;&#26684;&#32013;
<del datetime="2008-06-04T00:46:38+00:00">$person = array(
&#9;        &#9;&#9;array('name'  =&gt; $_POST["name1"], 'weight'  =&gt; $_POST["weight1"]),
&#9;        &#9;&#9;array('name'  =&gt; $_POST["name2"], 'weight'  =&gt; $_POST["weight2"]),
&#9;        &#9;&#9;array('name'  =&gt; $_POST["name3"], 'weight'  =&gt; $_POST["weight3"])
&#9;        &#9;&#9;);</del>
※問題があったので下に修正したものを書きましたのでそちらを参考にしてください。

//2&#27425;&#20803;&#37197;&#21015;&#12398;&#20013;&#12398;&#36899;&#24819;&#37197;&#21015;weight&#12398;&#20516;&#12434;&#37197;&#21015;$weight&#12398;&#20013;&#12395;&#20195;&#20837;
foreach ($person as $key =&gt; $row) {
    $weight[$key]  = $row['weight'];
}

//$weight&#12398;&#25968;&#20516;&#12398;&#22823;&#12365;&#12356;&#38918;&#12395;$person&#12418;&#20006;&#12403;&#26367;&#12360;&#12377;&#12427;&#12290;
array_multisort($weight, SORT_DESC,  $person);

//&#37197;&#21015;&#12398;&#20013;&#12434;&#38918;&#30058;&#12395;&#34920;&#31034;
for($i=0; $i&lt;3; $i++){
&#9;echo '&lt;p&gt;&#21517;&#21069;&#65306;'.$person[$i]['name'].'&#12288;&#20307;&#37325;&#65306;'.$person[$i]['weight'].'&lt;/p&gt;';
}
?&gt;
</code>
</pre>
<p>コメント欄にてyusuke0927さんに下記のようなご指摘を受けました。ありがとうございます！</p>
<blockquote><p>
$_POST["name1"] とやっている箇所は htmlspecialchars() を入れておかないと、＜script＞タグを埋め込めてJavaScript等を実行できてしまいます。（いわゆるクロスサイトスクリプティングというやつですね）
</p></blockquote>
<p>ということだったので、POSTで受け取ったデータを配列に代入するときに htmlspecialchars()を使ってJavaScript等を実行できないように修正しました。<br />
これで入力されてもそのまま出力されるはずっ！</p>
<p>こういうご指摘は正直ありがたいです。どんどんお願いしますー！</p>
<pre>
<code>
$person = array(
&#9;        &#9;&#9;array('name'  =&gt; htmlspecialchars($_POST["name1"]), 'weight'  =&gt; htmlspecialchars($_POST["weight1"])),
&#9;        &#9;&#9;array('name'  =&gt; htmlspecialchars($_POST["name2"]), 'weight'  =&gt; htmlspecialchars($_POST["weight2"])),
&#9;        &#9;&#9;array('name'  =&gt; htmlspecialchars($_POST["name3"]), 'weight'  =&gt; htmlspecialchars($_POST["weight3"]))
&#9;        &#9;&#9;);
</code>
</pre>
<p>次回は「簡易電卓。0で割ったときの処理を自分なりに作りこむ。」だそうだ。がんばるぞ〜！(n' ∀ ')η</p>
<dl>
<dt>関連リンク</dt>
<dd><a href="http://blog.grayash.com/archives/748">第0回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみよう！</a></dd>
<dd><a href="http://blog.grayash.com/archives/749">第1回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
<dd><a href="http://blog.grayash.com/archives/749">第2回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
<dd><a href="http://blog.grayash.com/archives/754">第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.grayash.com/archives/754/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.grayash.com/archives/754" />
	</item>
		<item>
		<title>第2回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！</title>
		<link>http://blog.grayash.com/archives/750?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%25ac%25ac2%25e5%259b%259e%25e3%2580%258c%25e6%2596%25b0%25e3%2581%2597%25e3%2581%258f%25e3%2583%2597%25e3%2583%25ad%25e3%2582%25b0%25e3%2583%25a9%25e3%2583%259f%25e3%2583%25b3%25e3%2582%25b0%25e8%25a8%2580%25e8%25aa%259e%25e3%2582%2592%25e8%25a6%259a%25e3%2581%2588%25e3%2581%259f%25e3%2581%2584%25e3%2581%25a8%25e3%2581%258d</link>
		<comments>http://blog.grayash.com/archives/750#comments</comments>
		<pubDate>Thu, 29 May 2008 16:38:05 +0000</pubDate>
		<dc:creator>suniti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.grayash.com/?p=750</guid>
		<description><![CDATA[百式さんの運営するIDEA＊IDEAの「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」を実際にやってみる第2回目！ 今回の問題はこちら！ 現在時刻にあわせてやる気のでるメッセージを出力（例：もうすぐラ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.100shiki.com/">百式</a>さんの運営する<a href="http://www.ideaxidea.com/">IDEA＊IDEA</a>の「<a href="http://www.ideaxidea.com/archives/2008/02/10_7.html">新しくプログラミング言語を覚えたいときに行なうべき10の練習問題</a>」を実際にやってみる第2回目！</p>
<p>今回の問題はこちら！</p>
<blockquote>
<ol>
<li>現在時刻にあわせてやる気のでるメッセージを出力（例：もうすぐランチ！がんばれ！）。</li>
</ol>
</blockquote>
<p>今回は時間の取得さえできれば問題なっしん。<br />
PHPで日付の取得はdate関数を使えば楽チンなのですぐできました。<br />
配列にメッセージを予め入力しておいて、対応した時間によってそのメッセージを選んで出力するだけ！<br />
後は指定した時刻以外のときのメッセージを入力しておけばOK。</p>
<p>今回作ったプログラムだと1分単位のメッセージなので指定した時間を逃すと見れなくなる...<br />
分単位じゃなくて時間単位にすればよかったかなー。でも「はなまるマーケット」は8時半だし仕方ないw<br />
個別に「このメッセージは分刻みだけどそれ以外は時間刻みで！」という場合はswitchで分岐しないでifで分岐すればいいよー！(n' ∀ ')η</p>
<p>実際に動いているのはこちら<br />
<a href="http://labs.grayash.com/PHP_study/02.php">第2回目「新しくプログラミング言語を覚えたいときに行うべき10の練習問題　〜PHP編〜」</a></p>
<p>書いたコードはこちら</p>
<pre>
<code>
&lt;?php
$message = array('(n' &#8704; ')&#951;&#65308;&#36215;&#12365;&#12429;&#12316;&#65281;',&#9;//7&#26178;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#12399;&#12394;&#12414;&#12427;&#12510;&#12540;&#12465;&#12483;&#12488;&#22987;&#12414;&#12387;&#12383;&#12424;&#65281;&#12381;&#12429;&#12381;&#12429;&#23478;&#20986;&#12394;&#12356;&#12392;&#36933;&#21051;&#65281;',&#9;//8&#26178;&#21322;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#20986;&#31038;&#65281;&#20170;&#26085;&#12418;1&#26085;&#12364;&#12435;&#12400;&#12429;&#12316;&#65281;',//10&#26178;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#12362;&#26172;&#12384;&#12316;&#65281;&#20170;&#26085;&#12399;&#20309;&#39135;&#12409;&#12427;&#65311;',//13&#26178;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#30496;&#12367;&#12394;&#12427;&#26178;&#38291;&#12384;&#12364;&#32784;&#12360;&#12427;&#12398;&#12384;&#12387;&#65281;',//15&#26178;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#23450;&#26178;&#12414;&#12391;&#24460;1&#26178;&#38291;&#65281;&#12418;&#12358;&#23569;&#12375;&#12384;&#12424;&#65281;',//17&#26178;&#21322;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#23450;&#26178;&#12395;&#12394;&#12387;&#12383;&#65281;&#27531;&#26989;&#12394;&#12369;&#12428;&#12400;&#24112;&#12428;&#12427;&#12424;&#65281;',//18&#26178;&#21322;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#12381;&#12429;&#12381;&#12429;&#22805;&#39135;&#12384;&#12424;&#12540;&#65281;',//20&#26178;
&#9;&#9;&#9;'(n' &#8704; ')&#951;&#65308;&#20170;&#26085;&#12418;&#12362;&#30130;&#12428;&#12373;&#12414;&#12391;&#12375;&#12383;&#12387;&#65281;');//1&#26178;

switch(date("H:i")){
&#9;case '07:00':
&#9;&#9;$str = $message[0];
&#9;&#9;break;
&#9;case '08:30':
&#9;&#9;$str = $message[1];
&#9;&#9;break;
&#9;case '10:00':
&#9;&#9;$str = $message[2];
&#9;&#9;break;
&#9;case '13:00':
&#9;&#9;$str = $message[3];
&#9;&#9;break;
&#9;case '15:00':
&#9;&#9;$str = $message[4];
&#9;&#9;break;
&#9;case '17:30':
&#9;&#9;$str = $message[5];
&#9;&#9;break;
&#9;case '18:30':
&#9;&#9;$str = $message[6];
&#9;&#9;break;
&#9;case '20:00':
&#9;&#9;$str = $message[7];
&#9;&#9;break;
&#9;case '01:00':
&#9;&#9;$str = $message[8];
&#9;&#9;break;
&#9;default:
&#9;&#9;$str = '(&#65507;&#65293;&#65507;)&#65404;&#65392;&#65437;';
}
echo $str;
?&gt;
</code>
</pre>
<p>次回は「複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す（例：同僚の体重を入力して計算）。」だそうだ。がんばるぞ〜！(n' ∀ ')η</p>
<dl>
<dt>関連リンク</dt>
<dd><a href="http://blog.grayash.com/archives/748">第0回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみよう！</a></dd>
<dd><a href="http://blog.grayash.com/archives/749">第1回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
<dd><a href="http://blog.grayash.com/archives/749">第2回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
<dd><a href="http://blog.grayash.com/archives/754">第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.grayash.com/archives/750/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.grayash.com/archives/750" />
	</item>
		<item>
		<title>第1回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！</title>
		<link>http://blog.grayash.com/archives/749?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%25ac%25ac1%25e5%259b%259e%25e3%2580%258c%25e6%2596%25b0%25e3%2581%2597%25e3%2581%258f%25e3%2583%2597%25e3%2583%25ad%25e3%2582%25b0%25e3%2583%25a9%25e3%2583%259f%25e3%2583%25b3%25e3%2582%25b0%25e8%25a8%2580%25e8%25aa%259e%25e3%2582%2592%25e8%25a6%259a%25e3%2581%2588%25e3%2581%259f%25e3%2581%2584%25e3%2581%25a8%25e3%2581%258d</link>
		<comments>http://blog.grayash.com/archives/749#comments</comments>
		<pubDate>Thu, 29 May 2008 15:15:14 +0000</pubDate>
		<dc:creator>suniti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.grayash.com/?p=749</guid>
		<description><![CDATA[百式さんの運営するIDEA＊IDEAの「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」を実際にやってみる第1回目！ 今回の問題はこちら！ 「なんらかのカウントアップメッセージを1から100まで出すけど [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.100shiki.com/">百式</a>さんの運営する<a href="http://www.ideaxidea.com/">IDEA＊IDEA</a>の「<a href="http://www.ideaxidea.com/archives/2008/02/10_7.html">新しくプログラミング言語を覚えたいときに行なうべき10の練習問題</a>」を実際にやってみる第1回目！</p>
<p>今回の問題はこちら！</p>
<blockquote>
<ol>
<li>「なんらかのカウントアップメッセージを1から100まで出すけど、3のときだけアホになる！（例：1万円！2万円！しゃ～ん万円！とか）」。</li>
</ol>
</blockquote>
<p>まぁ要するに世界のナベアツですなw<br />
今回の問題は簡単なようで実は結構難しかった（めんどくさかった）です。</p>
<p>というのも、<strong>3で割り切れる数字のときだけアホになれば楽</strong>なのですが、<strong>3で割り切れない場合でかつ数値に3が入っていた場合もアホになる</strong>のです。<strong>31</strong>とかね。</p>
<p>この割り切れないけど、数値に3が入っていた場合の処理がめんどくさかったです。<br />
実際に出来上がったコードを書くので参考にしてみてください。<br />
解りやすいようにコメント多めにしてみましたがどうでしょう？</p>
<p>自分で読み返してみても無駄な処理が多いので、もっとスリムアップできると思います。<br />
やっぱりこの場合正規表現かすら？(n'ω' `)</p>
<p>実際に動いているのはこちら<br />
<a href="http://labs.grayash.com/PHP_study/01.php">第1回目「新しくプログラミング言語を覚えたいときに行うべき10の練習問題　〜PHP編〜」</a></p>
<p>書いたコードはこちら</p>
<pre>
<code>
&lt;?php
//&#12450;&#12507;&#12395;&#12394;&#12427;&#22580;&#21512;&#12398;&#25991;&#23383;$str1&#12399;&#19968;&#26689;&#12289;$str2&#12399;&#20108;&#26689;
$str1 = array('', '&#12356;&#12385;', '&#12395;&#12387;', '&#12373;&#12435;', '&#12375;&#12387;', '&#12372;', '&#12429;&#12367;', '&#12394;&#12394;', '&#12399;&#12385;', '&#12365;&#12421;&#12358;', '&#12376;&#12421;&#12358;');
$str2 = array('', '&#12376;&#12421;&#12316;&#12358;', '&#12395;&#12376;&#12421;', '&#12373;&#12316;&#12435;&#12376;&#12421;', '&#12424;&#12316;&#12435;&#12376;&#12421;', '&#12372;&#12316;&#12376;&#12421;', '&#12429;&#12367;&#12376;&#12421;&#12316;', '&#12394;&#12394;&#12376;&#12421;&#12316;', '&#12399;&#12385;&#12376;&#12421;&#12316;', '&#12365;&#12421;&#12358;&#12376;&#12421;');

//1&#12363;&#12425;100&#12414;&#12391;&#12523;&#12540;&#12503;
for($i=1; $i&lt;=100; $i++){
&nbsp;&#9;//1&#26689;&#12398;&#22580;&#21512;
&nbsp;&#9;if($i&lt;10){
&nbsp;&nbsp;&#9;&#9;//3&#12398;&#20493;&#25968;&#12398;&#22580;&#21512;
&nbsp;&nbsp;&#9;&#9;if(!($i%3)){
&nbsp;&nbsp;&nbsp;&#9;&#9;&#9;$sum = $str1[$i];
&nbsp;&nbsp;&#9;&#9;}
&nbsp;&nbsp;&#9;&#9;//&#26222;&#36890;&#12398;&#25968;&#23383;&#12398;&#22580;&#21512;
&nbsp;&nbsp;&#9;&#9;else{
&nbsp;&nbsp;&nbsp;&#9;&#9;&#9;$sum = $i;
&nbsp;&nbsp;&#9;&#9;}
&nbsp;&#9;}
&nbsp;&#9;//2&#26689;&#12289;3&#26689;&#12398;&#22580;&#21512;
&nbsp;&#9;else{
&nbsp;&nbsp;&#9;&#9;//2&#26689;&#12398;&#22580;&#21512;&#12289;10&#12398;&#20301;&#12392;1&#12398;&#20301;&#12434;&#25244;&#12365;&#20986;&#12375;
&nbsp;&nbsp;&#9;&#9;$num1 = mb_substr($i,0,1);
&nbsp;&nbsp;&#9;&#9;$num2 = mb_substr($i,1,2);
&nbsp;&nbsp;&#9;&#9;
&nbsp;&nbsp;&#9;&#9;//10&#12398;&#20301;&#12392;1&#12398;&#20301;&#12364;3&#12398;&#22580;&#21512;&#12363;&#12289;3&#12398;&#20493;&#25968;&#12398;&#22580;&#21512;
&nbsp;&nbsp;&#9;&#9;if($num1 ==3 || $num2 ==3 || !($i%3)){
&nbsp;&nbsp;&nbsp;&#9;&#9;&#9;$sum = $str2[$num1];
&nbsp;&nbsp;&nbsp;&#9;&#9;&#9;$sum .= $str1[$num2];
&nbsp;&nbsp;&#9;&#9;}
&nbsp;&nbsp;&#9;&#9;//&#26222;&#36890;&#12398;&#25968;&#23383;&#12398;&#22580;&#21512;
&nbsp;&nbsp;&#9;&#9;else{
&nbsp;&nbsp;&nbsp;&#9;&#9;&#9;$sum = $i;
&nbsp;&nbsp;&#9;&#9;}
&nbsp;&#9;}
&nbsp;&#9;//&#20986;&#21147;
&nbsp;&#9;echo $sum.'&#19975;&#20870;&#65281;&lt;br&gt;';
}
?&gt;
</code>
</pre>
<p>次回は「現在時刻にあわせてやる気のでるメッセージを出力」だそうだ。がんばるぞ〜！(n' ∀ ')η</p>
<dl>
<dt>関連リンク</dt>
<dd><a href="http://blog.grayash.com/archives/748">第0回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみよう！</a></dd>
<dd><a href="http://blog.grayash.com/archives/749">第1回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
<dd><a href="http://blog.grayash.com/archives/750">第2回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
<dd><a href="http://blog.grayash.com/archives/754">第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた！！</a></dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.grayash.com/archives/749/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.grayash.com/archives/749" />
	</item>
		<item>
		<title>第0回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみよう！</title>
		<link>http://blog.grayash.com/archives/748?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e7%25ac%25ac0%25e5%259b%259e%25e3%2580%258c%25e6%2596%25b0%25e3%2581%2597%25e3%2581%258f%25e3%2583%2597%25e3%2583%25ad%25e3%2582%25b0%25e3%2583%25a9%25e3%2583%259f%25e3%2583%25b3%25e3%2582%25b0%25e8%25a8%2580%25e8%25aa%259e%25e3%2582%2592%25e8%25a6%259a%25e3%2581%2588%25e3%2581%259f%25e3%2581%2584%25e3%2581%25a8%25e3%2581%258d</link>
		<comments>http://blog.grayash.com/archives/748#comments</comments>
		<pubDate>Thu, 29 May 2008 13:43:08 +0000</pubDate>
		<dc:creator>suniti</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.grayash.com/archives/748</guid>
		<description><![CDATA[ちょっと前になるけど、百式さんの運営するIDEA＊IDEAで「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」というエントリーがあったので、時間があるときに少しずつ作ってみようと思います。 Rubyがオ [...]]]></description>
			<content:encoded><![CDATA[<p>ちょっと前になるけど、<a href="http://www.100shiki.com/">百式</a>さんの運営する<a href="http://www.ideaxidea.com/">IDEA＊IDEA</a>で「<a href="http://www.ideaxidea.com/archives/2008/02/10_7.html">新しくプログラミング言語を覚えたいときに行なうべき10の練習問題</a>」というエントリーがあったので、時間があるときに少しずつ作ってみようと思います。</p>
<p>Rubyがオススメとか良く聞くけれど、使う言語はPHP。PHPを使う理由はやっぱり業務に直結しやすいから。</p>
<p>さて、実際にエントリーの中で書かれていた練習問題は下記の通り。</p>
<blockquote>
<ol>
<li>「なんらかのカウントアップメッセージを1から100まで出すけど、3のときだけアホになる！（例：1万円！2万円！しゃ～ん万円！とか）」。</li>
<li>現在時刻にあわせてやる気のでるメッセージを出力（例：もうすぐランチ！がんばれ！）。</li>
<li>複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す（例：同僚の体重を入力して計算）。</li>
<li>簡易電卓。0で割ったときの処理を自分なりに作りこむ。</li>
<li>キーワードを入れてYahoo!の検索結果を出力。</li>
<li>テキストを入れると語尾が赤ちゃん言葉に（例：ですよ→でちゅよ）。</li>
<li>メールアドレスを入れるとあらかじめ用意されたテンプレートファイルにそのメアドを埋め込んだ上でメール送信（スパムはダメだよ！）。</li>
<li>「（名前）が、（場所）で、（アクション）した」がランダムに組み合わされて出てくるプログラム。</li>
<li>URLを入れるとそのページのはてなブックマーク数が出てくるプログラム。</li>
<li>ある名前とある名前を入れると相性診断を10段階で出してくれるプログラム。診断結果は適当でもいいけど、同じ組み合わせだったら同じ数値が必ずでないといけないように。</li>
</ol>
</blockquote>
<p>一見、簡単な順に並んでるのかと思ったけどそんなことないような気が...</p>
<p>簡単かなー？と思う練習問題は、1、2、3、5、8、9。<br />
ちょっと難しいかも？と思う練習問題は4、6、7、10。</p>
<p>5、9はYahoo!、はてなブックマークのAPIを使うので若干難しそうに思ったけど、PHPのSimpleAPI（だよね？）を使うと割と簡単にできそう。</p>
<p>意外と難しいと思われるのが4。0で割ったときの処理をどうするかかな？強制的にエラー出してしまえばいいのかすら？</p>
<p>後は7のメール送信の処理かな？メール送信の部分はサーバーによっても違うかもしれないし調べつつやってみようー！</p>
<p>最後の10は普通に難しい...まずどうやって判定させたものか困る...</p>
<p>そんなわけで、コードを公開してやっていくので変な処理してたり困ってたら教えてください＞＜</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.grayash.com/archives/748/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.grayash.com/archives/748" />
	</item>
		<item>
		<title>名言集.comの名言を一日一回POSTするtwitterBOTを作った。</title>
		<link>http://blog.grayash.com/archives/737?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%2590%258d%25e8%25a8%2580%25e9%259b%2586com%25e3%2581%25ae%25e5%2590%258d%25e8%25a8%2580%25e3%2582%2592%25e4%25b8%2580%25e6%2597%25a5%25e4%25b8%2580%25e5%259b%259epost%25e3%2581%2599%25e3%2582%258btwitterbot%25e3%2582%2592%25e4%25bd%259c%25e3%2581%25a3%25e3%2581%259f%25e3%2580%2582</link>
		<comments>http://blog.grayash.com/archives/737#comments</comments>
		<pubDate>Sun, 18 May 2008 10:07:07 +0000</pubDate>
		<dc:creator>suniti</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.grayash.com/?p=737</guid>
		<description><![CDATA[まめことネコゼのどたばた会議で宣言した「名言BOTを作る！」を完成させました。 http://twitter.com/dictumer 今回はPHPとpearを使って、CORESERVERで動かしています。 CORESE [...]]]></description>
			<content:encoded><![CDATA[<p>まめことネコゼのどたばた会議で宣言した「名言BOTを作る！」を完成させました。<br />
<a href="http://twitter.com/dictumer">http://twitter.com/dictumer</a></p>
<p>今回はPHPとpearを使って、CORESERVERで動かしています。<br />
CORESERVERでpearを動かすにあたってはこちらのエントリーが非常に参考になりました。あざっす！(n' ∀ ')η<br />
<a href="http://blog.technology-knowledge.jp/2007/12/13/64/">共有サーバ（CORESERVER.JP）で自由にPEARのインストールをする</a></p>
<p>twitterへのPOST自体はpearを使えばすごく簡単に出来るのですが、HTMLを取得して特定のタグから必要なデータのみ抜き出す（スクレイピング）作業と、その抜き取ったデータの処理（無駄なデータを削除するなど）、エラー処理に苦労しました。</p>
<p>pearを使ったのが初めてだった事もあるのですが、スクレイピングのやり方が分からずPHPで昔ながらの手法で作業しました。これは何か方法があるに違いない！pear＆PHPの詳しい人教えて！＞＜</p>
<p>まぁそんなつたないコードですが、公開しますので赤字つけてくれる人大募集！<br />
コメントでもtwitterでも何でも良いのでお願いします＞＜</p>
<blockquote><p>
<code><br />
&lt;?php<br />
require_once 'HTTP/Request.php';</p>
<p>//&#21517;&#35328;&#38598;.com&#12398;&#26368;&#22823;&#25968;<br />
$max = 2019;</p>
<p>//&#20081;&#25968;&#12434;&#29983;&#25104;<br />
$random = rand(0,$max);</p>
<p>//twitterAPI&#12398;URL<br />
$url ="http://twitter.com/statuses/update.xml";</p>
<p>// URL &#12434;&#12458;&#12540;&#12503;&#12531;<br />
$fp = @fopen('http://www.meigensyu.com/word/index'.$random.'.html', 'r');</p>
<p>//&#12487;&#12540;&#12479;&#12364;&#28961;&#12356;&#22580;&#21512;&#12399;&#20877;&#24230;&#20081;&#25968;&#12434;&#29983;&#25104;&#12375;&#12390;URL&#12434;&#22793;&#26356;&#12377;&#12427;<br />
while (!$fp) {<br />
&#9;//&#20081;&#25968;&#12434;&#20877;&#24230;&#29983;&#25104;<br />
&#9;$random = rand(0,$max);<br />
&#9;echo '&#20081;&#25968;&#65307;'.$random.'&lt;br /&gt;';<br />
&#9;$fp = @fopen('http://www.meigensyu.com/word/index'.$random.'.html', 'r');<br />
&#9;if($fp) break;    // &#12523;&#12540;&#12503;&#33073;&#20986;<br />
}</p>
<p>// HTML &#12434;&#35501;&#12415;&#20986;&#12377;<br />
while (! feof($fp)) {<br />
&#9;$buffer = fgets($fp, 4096);<br />
&#9;if(strpos($buffer, '"text"')){<br />
&#9;&#9;while(!strpos($buffer, '&lt;/div&gt;')){<br />
&#9;&#9;&#9;$meigen .= $buffer;<br />
&#9;&#9;&#9;$buffer = fgets($fp, 4096);<br />
&#9;&#9;}<br />
&#9;&#9;$meigen .= $buffer;<br />
&#9;}<br />
&#9;else if(strpos($buffer, '"author"')){<br />
&#9;&#9;while(!strpos($buffer, '&lt;/div&gt;')){<br />
&#9;&#9;&#9;$author .= $buffer;<br />
&#9;&#9;&#9;$buffer = fgets($fp, 4096);<br />
&#9;&#9;}<br />
&#9;&#9;$author .= $buffer;<br />
&#9;}<br />
}<br />
//&#12479;&#12464;&#38500;&#21435;<br />
$meigen = strip_tags($meigen);<br />
$author = strip_tags($author);</p>
<p>//&#27491;&#35215;&#34920;&#29694;&#12391;&#12486;&#12461;&#12473;&#12488;&#12363;&#12425;&#19981;&#35201;&#12394;&#37096;&#20998;&#12434;&#38500;&#21435;<br />
//&#29305;&#23450;&#12398;&#12459;&#12486;&#12468;&#12522;&#12395;&#20837;&#12387;&#12390;&#12427;&#21517;&#35328;&#12399;<br />
if( ereg("\[&#26144;&#30011;&#12398;&#21517;&#35328;\]|\[&#28459;&#30011;&#12539;&#12450;&#12491;&#12513;&#12398;&#21517;&#35328;\]|\[&#12489;&#12521;&#12510;&#12398;&#21517;&#35328;\]|\[&#12371;&#12392;&#12431;&#12374;\]", $author) ){<br />
&#9;$meigen = ereg_replace("[\r\n\]|&#12288;|&amp;nbsp;", "", $meigen);<br />
&#9;$author  = ereg_replace("[\r\n\]|&#12288;&amp;nbsp;|&#12288;|&amp;nbsp;&amp;nbsp;|^&amp;nbsp;|\[.+\]|&amp;nbsp;&#20986;&#20856;.|^&#20986;&#20856;.", "", $author);<br />
&#9;$author  = ereg_replace("&amp;nbsp;", "&#12288;", $author);<br />
}<br />
else{<br />
&#9;//&#20840;&#35282;&#12473;&#12506;&#12540;&#12473;&#12289;&#21322;&#35282;&#12473;&#12506;&#12540;&#12473;&#38500;&#21435;<br />
&#9;$meigen = ereg_replace("[\r\n\]|&#12288;|&amp;nbsp;", "", $meigen);<br />
&#9;$author  = ereg_replace("[\r\n\]|&#12288;&amp;nbsp;|&#12288;|^&amp;nbsp;|&amp;nbsp;&amp;nbsp;|^&#20986;&#20856;.|&amp;nbsp;&#20986;&#20856;.|\(.+\)|\[.+\]|&#65288;.+&#65289;", "", $author);<br />
&#9;$author  = ereg_replace("/&#20986;&#20856;+/", "", $author);<br />
}<br />
// HTML &#12398;&#12463;&#12525;&#12540;&#12474;<br />
fclose($fp) or die("CLOSE");  </p>
<p>//&#20986;&#20856;&#12364;&#31354;&#12398;&#22580;&#21512;&#12364;&#12354;&#12427;&#12398;&#12391;&#12300;&#19981;&#26126;&#12301;&#12392;&#20837;&#21147;<br />
if($author=='') $author='&#19981;&#26126;';</p>
<p>// &#12477;&#12465;&#12483;&#12488;&#12434;&#38283;&#12365;&#12289;&#36865;&#20449;&#24418;&#24335;&#12434;&#25351;&#23450;&#12375;&#12289;&#12487;&#12540;&#12479;&#12434;&#36865;&#20449;&#12377;&#12427;<br />
$req = new HTTP_Request();<br />
$req-&gt;setBasicAuth("twitterID", "twitterPASSWORD");<br />
$req-&gt;setMethod(HTTP_REQUEST_METHOD_POST);<br />
$req-&gt;addPostData('status', $meigen.'&#12288;&#20986;&#20856;&#65306;&#12300;'.$author.'&#12301;');<br />
$req-&gt;setURL($url);</p>
<p>  if (!PEAR::isError($req-&gt;sendRequest())) {<br />
    $response = $req-&gt;getResponseBody();<br />
  }<br />
 ?&gt;<br />
</code>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.grayash.com/archives/737/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.grayash.com/archives/737" />
	</item>
		<item>
		<title>いまさらFlickrのAPIを使ってみたよ！</title>
		<link>http://blog.grayash.com/archives/504?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=thueflickriapioeaaesse</link>
		<comments>http://blog.grayash.com/archives/504#comments</comments>
		<pubDate>Fri, 25 May 2007 13:53:27 +0000</pubDate>
		<dc:creator>suniti</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.grayash.com/archives/504</guid>
		<description><![CDATA[今まで、他人が作ったマッシュアップは大量に見てきたけど自分でAPIを使った何かを作ったことが無かったので、今更FlickrのAPIを利用したギャラリーを作ってみたよ！ PHPを選んだ理由は特別無く、Perlはデバックが面 [...]]]></description>
			<content:encoded><![CDATA[<p>今まで、他人が作ったマッシュアップは大量に見てきたけど自分でAPIを使った何かを作ったことが無かったので、今更FlickrのAPIを利用したギャラリーを作ってみたよ！</p>
<p>PHPを選んだ理由は特別無く、Perlはデバックが面倒な印象があったので、 「それならPHP勉強してみるか〜」っというだけ。<br />
<a href="http://flickr.shinla.org/">http://flickr.shinla.org/</a></p>
<ul>
<li>PHP5専用</li>
<li>なんちゃってオブジェクト指向</li>
<li>サムネイルクリック時にLightBoxとFlickrへ飛ばすか選べるよ！</li>
</ul>
<p>以下、コードと反省点などなど。</p>
<p><span id="more-504"></span></p>
<pre>
<code>

	class common_Data
	{
		//プロパティ
		public $myapi_key = 'ここは自分のAPIキーを入れてくだしあ';//Flickr API KEY
		public $myuser_name = 'suniti';//自分のユーザーネーム
		public $per_page = '50';//1ページに表示する枚数（最大500件）
		public $url_flg = '1';//写真のリンク先設定（1=LightBoxで表示　2=Flickrで表示）
		public $filename = 'index.php';//ファイル名

		public $myuser_id;//ユーザーID
		public $get_page;//表示しているページ
		public $get_pages;//全体のページ数
		public $total_photos;//写真の総数

		// ライセンス
		public $app_name = 'My Flickr Photo';
		public $version = '0.1';
		public $author = 'grayash.com';
		public $url = 'http://blog.grayash.com/';

		//コンストラクタ
		function __construct() {
			//ユーザーIDの処理
			if($this->myuser_id == ''){
				$this->myuser_id = ViewMyFlickrPhoto::convert_userid($this->myuser_name);
				$this->user_photo_url =	ViewMyFlickrPhoto::get_userurl($this->myuser_id);
			}
		}
	}

	class ViewMyFlickrPhoto extends common_Data {
		//ユーザーネームから、ユーザーIDを取得
		function convert_userid($u_name) {
			$rest = 'http://www.flickr.com/services/rest/?method=flickr.people.findByUsername';
			$rest .='&#038;api_key=' .$this->myapi_key;
			$rest .='&#038;username=' .$u_name;
			$article = simplexml_load_file($rest);

			return $article->user[id];
		}

		//ユーザーIDから写真が格納してあるURLを取得　
		//（ユーザーネームと違う場合があるから（変更した人？））
		function get_userurl($u_id) {
			$rest = 'http://www.flickr.com/services/rest/?method=flickr.people.getInfo';
			$rest .='&#038;api_key=' .$this->myapi_key;
			$rest .='&#038;user_id=' .$u_id;
			$article = simplexml_load_file($rest);

			return $article->person->photosurl;
		}

		//写真を取得
		function get_userphoto($u_page) {
			//URL生成
			$rest  ='http://www.flickr.com/services/rest/?method=flickr.photos.search';
			$rest .='&#038;api_key=' .$this->myapi_key;
			$rest .='&#038;user_id=' .$this->myuser_id;
			$rest .='&#038;per_page=' .$this->per_page;

			//ページ処理
			if($u_page != ''){
				$rest .='&#038;page=' .$u_page;
			}

			//接続＆XML解析
			$article = simplexml_load_file($rest);

			$this->get_page			= $article->photos["page"];
			$this->get_pages		= $article->photos["pages"];
			$this->total_photos	= $article->photos["total"];

			foreach ($article->photos->photo as $photo) {
				$str  ='http://farm';
				$str .=$photo["farm"];
				$str .='.static.flickr.com/';
				$str .=$photo["server"];
				$str .='/';
				$str .=$photo["id"];
				$str .='_';
				$str .=$photo["secret"];

				if($this->url_flg == 2){
					//Flickr利用の処理
				}
				//LightBoxの場合
				else if($this->url_flg == 1){
					//LightBox利用の処理
				}
			}
		}

		//エラー表示
		function error($value) {
			echo '次のエラーが出てるで？：' .$value;
		}
	}
##################################################################################################
##  メイン処理
##################################################################################################
	$tml =	new ViewMyFlickrPhoto();
	$tml->get_userphoto($_GET["page"]);
	$tml->page_control();
	$tml->license();
</code>
</pre>
<p>反省点</p>
<ul>
<li>ページ出力の処理がダセェ。（WordPressの問題でココには書いてません）
</li>
<li>なんちゃってオブジェクト指向 → いまいち理解しきれなかった。
<ul>
<li>デザイナーから見たら手続き型の方が理解しやすい。</li>
</ul>
</li>
<li>オブジェクト指向を使う意味が掴めなかった。やっぱり小規模じゃダメかな？</li>
<li>「重い」 FlickrのAPIが鈍いのか、プログラムの組み方が悪いのか・・・？原因不明＞＜</li>
</ul>
<p>勉強になった点</p>
<ul>
<li>PHP4とPHP5で全然違うんだね！ PHP5は便利だ！ありがとうsimplexml！</li>
<li>APIって面白い！Web2.0って素敵！</li>
<li>へー、クラスってこうやって使うのか・・・</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.grayash.com/archives/504/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.grayash.com/archives/504" />
	</item>
	</channel>
</rss>

