負けてたまるか。

脳トレ、プログラミング、PHP、WEB製作などのメモ

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-) | Edit
41~50問 PHP実践演習


41~50問 
演習をひたすらやり続ければPHPができるようになる・・・かも

(41)現在から10日後の日付を求める


/* 現在の日時を取得 */
$date = getdate();

/* mktimeに現在の日時を設定 */
$stamp = mktime(
$date["hours"]
, $date["minutes"]
, $date["seconds"]
, $date["mon"]
, $date["mday"] + 10 // 10日後
, $date["year"]
);
// 10日後の日付を求める(1970年から指定された時間までの通算秒を得る)
//引数は year から順に省略することができる

/* 5日後の時間を得る(引数に通算秒を指定) */
$date = getdate($stamp);

/* なぜか文字化けするのでエンコードを設定 */
header("content-type:text/html; charset=EUC-JP");

/* 「2009年6月8日」と表示 */
echo $date["year"]."年".$date["mon"]."月".$date["mday"]."日";


/* 関数
int mktime ([ int $hour=date("H") [, int $minute=date("i") [, int $second=date("s")
[, int $month=date("n") [, int $day=date("j") [, int $year=date("Y") [, int $is_dst=-1 ]]]]]]] )
//日付を Unix のタイムスタンプとして取得する
*/


(42)変数が文字列、整数、小数点数、論理値、配列、リソース、オブジェクトかどうかを調べる


$str = "文字";			//文字
$num = 1234; //整数
$floa = 67.3454; //小数点数
$boo = FALSE; //論理値
$arr = array(1,2,4); //配列
$res = fopen("s.txt","rb"); //リソース
$obj = "文字"; //オブジェクト

echo is_string($str)."
";
echo is_int($num)."
";
echo is_float($floa)."
";
echo is_bool($boo)."
";
echo is_array($arr)."
";
echo is_resource($res)."
";
echo is_object($obj); //文字なのでFALSE


(43)変数が数値または数字形式の文字列、null、変数がセットされているかどうかを調べる


/* 数値または数字形式の文字列の判定に使う変数 */
$num = "123";
$num2 = 3343;
$num3 = "文字";

/* nullの判定に使う変数 */
$nul = 23423;
$nul2 = null;
$nul3 = "文字";

/* 変数がセットされているかどうかの判定に使う変数 */
$iss = 0;
$iss2 = null;
$iss3 = "";


/* 数値または数字形式の文字列の判定 */
is_numeric($num) ."
"; //TRUE
is_numeric($num2) ."
"; //TRUE
is_numeric($num3) ."
"; //FALSE

/* nullの判定 */
is_null($nul) ."
"; //FALSE
is_null($nul2) ."
"; //TRUE
is_null($nul3) ."
"; //FALSE

/* 変数がセットされているかどうかの判定 */
is_isset($iss) ."
"; //TRUE
is_isset($iss2) ."
"; //FALSE
is_isset($iss3) ."
"; //TRUE


(44)正規表現における ^A と B$ と . と [^a-zA-Z0-9_] の意味を答えよ


^A … 行頭の文字 A にマッチ
B$ … 行末の文字 B にマッチ
.  … 任意の一文字にマッチ(なんでもマッチ)
[a-zA-Z0-9_] … 英数字以外にマッチ //括弧[]の中に^が入ると否定になる


(45)MMO|GAME|RPG と ^A*BCD$ と MYU+RA と HUHU?MO の意味を答えよ


MMO|GAME|RPG … MMO、GAME、RPGにマッチ
^A*BCD$ … 行頭に文字 A の0文字以上の連続か文字 B があり、かつ行末にBCDがある場合にマッチ
MYU+RA … MY、Uが1文字以上の連続、RAがある場合にマッチ
HUHU?MO … HUH、Uが0回か1回、MOがある場合にマッチ


(46)正規表現の * , + , ? をそれぞれ {} を使って表す


* … {0,}
+ … {1,}
? … {0,1}
//ちなみに{n}は直前のパターンにn回マッチ


(47)「埼玉」と「咲玉」両方にマッチする正規表現


(埼|咲)玉


(48)<h1>~文字~;</h1> タグにマッチする正規表現を書け


<h1>.*</h1>


(49)アルファベットの大文字と + - * / = のどれか2~4文字にマッチする正規表現を書け


[A-Z+\-*\/=]{2,4}

/* 解説
[]   … クラス文字。カッコ[]内の任意の1文字にマッチ
\-   … []内で - (マイナス)という文字を表すには、直前に \ をつけてメタ文字にしなければならない。
\/   … /も同様。 phpで pattern を表すのに"/パターン/"となるためメタ文字にする
{2,4} … 2~4文字にマッチ
     使用例. {1,} = 1文字以上。{4} = 4文字。{2,12} = 2~12文字。
*/

もうなんかわからんので正規表現は放置。


(50)ファイルに文字列を追加する


$filename = "C:\\apapapache\\htdocs\\sample.txt";
$handle = fopen($filename,"a+b");

$str = array("1行目","2番目","3行目");

for($i=0;$ifwrite($handle,"\n");
fwrite($handle,$str[$i]);
}

fclose($handle);

/* 関数
fwrite($handle,$str)
//1行書き込む
a+b(fopenのオプション)
//追加読み書き+バイナリ
*/
スポンサーサイト
31~40問 
演習をひたすらやり続ければPHPができるようになる・・・かも

(31)変数の参照渡しを使う


$apple = "りんご";
$banana = "バナナ";
$orange = "みかん";

$apple = $banana;
//$appleに「バナナ」を代入
$orange = &$banana;
//参照渡し
//$orange = $banana
$banana = "パイナップル";
//$appleと$orangeの値はどうなる…?

echo '$appleの値: '.$apple ."
";
echo '$orangeの値: '.$orange ." //オレンジの値が \$banana と同じ!
";
echo '$bananaの値: '.$banana;


(32)グローバル宣言や$GLOBALSをつかう


手順
-----------------------------
・変数 a,b を宣言
・関数を作って変数 a,b をくっつける
・関数外で結果を表示
----------------------------
「global宣言」
$a = 12;
$b = 23;
$kekka = 22222;

function kansu(){
global $a,$b,$kekka;
//globalを宣言
$kekka = $a + $b;
}

kansu();
echo $kekka;
//35が表示される


「$GLOBAL変数」
$a = 12;
$b = 23;
$kekka;

function kansu(){
$GLOBALS["kekka"] = $GLOBALS["a"] + $GLOBALS["b"];
}

kansu();
//関数を実行
echo $kekka;
//関数の中はローカルスコープなので、$kekkaには値が入っていない…?


(33)多次元配列の配列情報を表示する


$array[] = array(1,2,3);
$array[] = array(4,5,6);
$array[] = array(7,8,9);
//多次元配列

echo "<pre>";
//<pre>タグで整形
print_r($array);
//配列情報を表示
echo "</pre>";


(34)変数 a に「流行」、変数 b に「流行インフルエンザ」と1行で代入する


$b = ($a = "流行")."インフルエンザ";


(35)三項演算子をつかう


$s = 22;

echo($s === "22") ? "\$sと\"22\"は数字と型が等しい" : "\$sと\"22\"は数字と型が等しくない";


(36)関数に渡された引数の数、指定した引数の値、全ての引数の値をそれぞれ表示する


function kansu(){
echo func_num_args()."
";
//渡された引数
echo func_get_arg(1)."
";
//引数1つ
print_r(func_get_args());
//全ての引数を配列で返す
}

kansu(1,2,3,4,5);

/* 関数
int func_num_args ( void )
//関数に渡された引数の数を返す
mixed func_get_arg ( int $arg_num )
//指定した引数を取得
array func_get_args ( void )
//関数の引数リストを配列で取得
*/


(37)日付が有効かどうか確認し、「am 02時10分43秒」と表示し、日付を連想配列で取得し表示する。



echo checkdate(12,4,2005);
//日付の確認(1と表示される)
echo date("a H時i分s秒");
//am 02時10分43秒と表示
$date = getdate();
//日付・時刻を連想配列で取得
echo "
";print_r($date);echo "
";

/* 関数
bool checkdate( int month, int day, int year )
//グレゴリオ歴の日付/時刻の妥当性を確認します
string date ( string $format [, int $timestamp ] )
//ローカルの日付/時刻を書式化する
format … 出力される日付文字列の書式
timestamp … Unix タイムスタンプ?
array getdate ([ int $timestamp=time() ] )
//日付/時刻情報を取得する
*/


(38)現在の時刻を配列で連想配列を取得し、floatの数値を返す



echo "
"; print_r(gettimeofday()); echo "
";
//現在の時刻の連想配列
echo gettimeofday(TRUE);
//float値
/* 関数
mixed gettimeofday( [ bool return_float ] )
//現在の時刻を連想配列で得る
return_float … TRUE を指定すると float の数値を返す
*/


(39)-+100~-+999までの数字を5列3行に整形して表示する。


$i=0;

while($i<3){
$n=0;
while($n < 5){
//whileの中にwhile
$minus = rand(0,1);
//0か1を代入。これを「-」と「+」に置き換える
if($minus == 0){
$minus = "-";
} else {
$minus = "+";
}

echo $minus;
$random[$i] = rand(100,999)." ";
echo $random[$i];
$n++;
}
echo "
";
$i++;
}


(40)「  布団がふっとんだ  」のバイト数と文字数を求め…



手順
------------------------------------------------------
1.「  布団がふっとんだ  」のバイト数と文字数を求める
2.substr()を使って「ふっとんだ」を取り出す
3.「ふっとんだ」と空白を削除
4.「布」と「団」の間に「でできた」を追加
-------------------------------------------------------
$string = "  布団がふっとんだ  ";

echo strlen($string)."
";
//1(バイト数) … 24バイト
echo mb_strlen($string,"EUC-JP")."
";
//1(文字数) … 12文字

echo substr($string,10,10)."
";
//2(「ふっとんだ」取り出し)

$old = array(" ","がふっとんだ");
//空白に置換するキーワード
$string = str_replace($old,"",$string);
echo $string."
";
//3(「がふっとんだ」と空白を削除) … 「布団」

$string = str_replace("布団","布でできた団",$string);
echo $string."
";
//4(「布」と「団」の間に「でできた」を追加) … 「布でできた団」
21~30問 PHPの特訓

(21)フォームを使って別のページに値を送る


[test.php]
<html><body>
<form action="test2.php" method="get">
<input type="text" name="word">
<input type="submit" value="検索">
</form>
</body></html>


[test2.php]
if ($_GET["word"]){
echo htmlspecialchars($_GET["word"])."で検索した結果";
} else {
echo "キーワードを入力してください";
}


(22)(21)のフォームではアドレス欄に値が表示されてしまいます。これを消すにはどうすればよいですか?


methodを「GET」ではなく「POST」、「$_GET」を「$_POST」に変更する


(23)キーワードを入力すると別のページに飛び、「戻る」キーワードもしくはキーワードが空の場合は元のページに戻す仕組みを作る



[test.php]
<?php 
session_start();

if($_SESSION["word"] == "戻る"){
echo "戻りました";

}

if(isset($_POST["word"])){
$word = $_POST["word"];
$_SESSION["word"] = $word;
header("Location: http://localhost/test2.php");
exit;
}
?>

<html>
<body>
<form action="test.php" method="post">
<input type="text" name="word">
<input type="submit" value="検索">
</form>
</body>
</html>


[test2.php]
session_start(); 

echo $_SESSION["word"]."の検索結果";

if($_SESSION["word"] == "戻る"){
header("Location: http://localhost/test.php");
}


(24)エンコードを設定する


header("content-type: text/html; charset=EUC-JP");


(25)txtファイルに文字を書き込む


$filename = "C:\\apapapache\\htdocs\\sample.txt";
//ファイル名
$string = "いちじゅうひゃくせんまんおくちょうけいがいしじょうこうかんせいさいごく";
//文字列

$handle = fopen($filename,"w");
//fopen() : ファイル開く
fwrite($handle,$string);
//fwrite() : ファイル書きこみ
fclose($handle);
//fclose() : ファイル閉じる

/* 関数
fopen(string $filename,string $mode)
fwrite(resource $handle , string $string)
fclose(resource $handle)
*/


(26)ファイルの中身を読む


$filename = "C:\\apapapache\\htdocs\\sample.txt";
//ファイル名


$handle = fopen($filename,"rb");
//ハンドル
$contents = fread($handle,filesize($filename));
//ファイル読む
fclose($handle);
//ファイル閉じる


echo $contents;


/* 関数
fread(string $handle,int $length)
…ファイルを読み込む。
(handle が指すファイルポインタから最高 length バイト読み込みます。)
Windowsの場合バイナリとテキストの形式が違うため、
fopenのモードパラメータに"b"を指定する
int filesize(string $filename)
…指定したファイルのサイズを取得。


(27)文字を次の3つにそれぞれフォーマットする。
「文字列を空白で右詰め」「整数を空白で左詰め」「整数を0で右詰め」


printf("[%10s]\n",    "abcde");
printf("[%-10d]\n", 23 );
printf("[%010d]\n", 4343 );

/* 関数
string sprintf(string $format [, mixed $args [, mixed $... ]])
…フォーマット文字列 format に基づき生成された文字列を返します。
パーセント記号 (%) の後に これらの要素が一つ以上続いたものが変換指定子。
*/


(28)以下に指定したキーワードを、まとめて置換する。また、置換した回数も表示する


指定ワード
-------------------------
「ブルドッグ」   →  「キューピー」
「カバ」       →  「ピラニア」
「雷神」      →  「八岐大蛇」
「ばいきんまん」 →  「バイキン仙人」
--------------------------------
検索文章
-----------------------------
ブルドッグのおじさん。怖い顔をしていて、怒ると大声を出すが、心は優しい。
カバの男の子。食いしん坊である。よくアンパンマンの顔を食べる。
かみなりぴかたんの父親の雷神。
ばいきんまんより先にこの星に来た仙人で魔法使い。
-------------------------------
$contents ="ブルドッグのおじさん。怖い顔をしていて、怒ると大声を出すが、心は優しい。
カバの男の子。食いしん坊である。よくアンパンマンの顔を食べる。
かみなりぴかたんの父親の雷神。
ばいきんまんより先にこの星に来た仙人で魔法使い。";

$search = array("ブルドッグ","カバ","雷神","ばいきんまん");
$replace = array("キューピー","ピラニア","八岐大蛇","バイキン仙人");

$contents = str_replace($search,$replace,$contents,$count);

echo $contents;
echo "
".$count;

/* 関数
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
//文字列を置換する。
$search … 検索ワード
$replace … 置換ワード
$subject … 検索する文章
&$count … 置換が行われた回数
*/


(29)「:」で文字列を分割する。


分割する文字列
-------------------
冠詞:副詞:前置詞:動詞:準動詞
-------------------

「方法その1」
$string = "冠詞:副詞:前置詞:動詞:準動詞";
//文字列
$pieces = explode(":",$string);
//「:」で分割

$i = 0;

while($i < count($pieces)){
echo $pieces[$i]."
";
$i++;
}

/* 関数
array explode ( string $delimiter , string $string [, int $limit=-1 ] )
//文字列の配列を返します。
$delimiter … 区切り文字
$limit   … 配列に返される要素数のリミット。
最後の要素に、 string の残りの部分が全て含まれる。
limitパラメータが負 … 最後の -limit 個の要素を除く全ての構成要素が返される。
*/


「方法その2」
$string = "冠詞:副詞:前置詞:動詞:準動詞";
//文字列
list($one[],$one[],$one[],$one[],$one[]) = explode(":",$string);

echo $one[0];
echo $one[2];

/* 関数
void list ( mixed $varname [, mixed $... ] )
//変数に値を代入
*/


(30)1行ずつURLが記述されたtxtファイルを読み込み、リンク付きURLを画面に出力する。


読み込むファイル[sample.txt]
-----------------------------------
http://plaza.rakuten.co.jp/quitada/diary/200410210000/
http://www.seo-association.com/
http://gogoru.seesaa.net/
http://www.flickr.com/photos/goggoru/
http://www.de4u.net/mt/archives/001072.html
http://yaplog.jp/matsu-you/archive/157
http://d.hatena.ne.jp/TomCat/
http://www.cre.ne.jp/writing/event/2004/goggole.html
http://ijigen.exblog.jp/804846
http://kokogiko.net/m/archives/000632.html
---------------------------------
$filename = ("C:\\apapapache\\htdocs\\sample.txt");
//ファイル
$handle = fopen($filename,"rb");
//ハンドル

$i = 0;
$link = array("a");
//配列を宣言
//理由1:宣言する方法がわからないので"a"を入れた
//理由2:while文内で宣言した場合ローカル変数になるかもしれないので

while(!feof($handle)){
//ファイルに達するまでループ

$link[$i] = fgets($handle);
//配列にそれぞれのURLを代入
echo "".$link[$i]."
";
//リンク付きでURLを表示
$i++;
}

fclose($handle);


/* 関数
string fgets ( resource $handle [, int $length ] )
//ファイルポインタから一行取得
$length … 取得するバイト数
bool feof ( resource $handle )
//ファイルポインタがファイル終端に達しているかを調べる
*/
(11)NULLを表示する

$nurupo = NULL;
$pooooo = "";

if($nurupo == NULL){
echo '$nurupoはNULLです
';
}

if($pooooo == NULL){
echo '$pooooはNULLです';
}



(12)現在の日付(年月日)と時間(何時何分何秒)を表示する。

echo date("日付:Y年m月d日 時間:H時i分s秒");



(13)switch文を使いおみくじ(のようなもの)を作る。
(「吉です」「凶です」などとランダムに文字を表示する)

$random = rand(0,3);
switch ($random) {
case 0:
echo "おめでとう!大吉です!";
break;
case 1:
echo "中吉です。まあまあですね";
break;
case 2:
echo "吉です。普通ですね";
break;
case 3:
echo "凶です。残念でした。";
break;



(14)配列を使って(13)を作る。

$random = rand(0,6);

$hairetu = array(
"21世紀のネコ型ロボット、「ドラえもん」",
"いつもドジばかりだが、やる時はやる「のび太」",
"お風呂が大好きな皆のヒロイン「しずかちゃん」",
"お金持ちで自慢話が多い「スネオ」",
"おまえのものは俺のもの。「ジャイアン」",
"お兄ちゃん思いの妹ロボット「ドラミちゃん」",
"何でもできる「出来すぎ君」"
);

echo $hairetu[$random];



(15)連想配列を作る

$renso = array(
"peach" => "桃",
"plum" => "梅",
"kuri" => "栗",
"rose" => "バラ",
);

echo $renso["rose"]."
";
echo $renso["plum"]."
";
echo $renso["peach"]."
";
echo $renso["kuri"]."
";



(16)URLから数字の引数を渡して、それを表示する

if (is_numeric($_GET["hikisu"]) == true) {
echo "渡された数字は ".htmlspecialchars($_GET["hikisu"])." です";
} else {
echo "数値ではない値が渡されました。";
}



(17)変数に値が入っているかを確認する

$sonzai = "値があります";

if (isset($sonzai)) {
echo "\$sonzaiには値があります";
}



(18)数字の「4.8」を切り捨て、「4.1」を切り上げ、「3.3」を四捨五入する

$num1 = 4.8;
$num2 = 4.1;
$num3 = 3.3;

echo "【変更前】
";
echo "\$num1 = ".$num1."
";
echo "\$num2 = ".$num2."
";
echo "\$num3 = ".$num3."

";

$num1 = floor($num1);
$num2 = ceil($num2);
$num3 = round($num3);

echo "【変更後】
";
echo "\$num1 = ".$num1." //切り捨て
";
echo "\$num2 = ".$num2." //切り上げ
";
echo "\$num3 = ".$num3." //四捨五入";



(19)foreachとはどんな命令ですか?また、$valueと$keyの変数について説明してください。
また、unset()で参照を解除する理由を書きなさい。

foreachは配列のデータをまとめて処理する命令。
$valueには、値が代入され、$keyには、キーが代入される。
foreach のループを終えた後でも、 $value は配列の最後の要素を参照したままとなっている。
次にforeachを使うときに配列が予期しない値を参照してしまうので、
unset()で参照を解除しなければならない。



(20)foreachを使って配列の中身を「キー:値」と整形して表示する
$vacant = array(
"赤" => "チューリップ",
"白" => "スズラン",
"黄色" => "ヒマワリ",
"オレンジ" => "しらんがな",
"紫" => "アジサイ",
);

foreach ($vacant as $key => $value) {
echo $key." : ".$value."

";
}

unset($value);
PHPを早くマスターするためのトレーニングメニュー。
手を動かして一気に覚える。

(1)「こんにちは」と表示する

echo "こんにちは";



(2)変数 n に 100 を代入。その変数を使って「目指せ 100 歳!」と表示する

$n = 100;
echo "目指せ $n 歳!";



(3)変数の値を表示するのではなく、変数名を表示するように書き換える

$n = 100;
echo '目指せ $n 歳!';



(4)文字列「PHPってプログラミング言語?」をwhile文、for文でそれぞれ5回表示する

$n = "PHPってプログラミング言語?";
$i = 1;

while ($i <= 5) {
echo $n."
";
$i++;
}

for ($i=1; $i <= 5; $i++) {
echo $n."
";
}



(5)数値が代入された、変数 com1 と変数 com2 の2つを比較して、「com1>com2」、「com1<com2」、「com1=com2」と値によって分岐して表示する

$com1 = 100;
$com2 = 100;

if($com1 > $com2) {
echo "com1>com2";
} else if($com1 < $com2) {
echo "com1<com2";
} else {
echo "com1=com2";
}



(6)if~else文を使わずに条件分岐する(条件や値はなんでもよい)

$myuuuu = (10 == 10) ? "TRUE" : "FALSE";
$fsda = (10 > 20) ? "10 > 20です" : "10 > 20 ではありません";

echo $myuuuu."
";
echo $fsda;



(7)ジャンケンゲーム

$janken = rand(0,2);

if ($janken == 0) {
echo "グー";
} else if ($janken == 1) {
echo "チョキ";
} else {
echo "パー";
}



(8)定数を2つ作り表示する

define(ITIBAN,"定数");
define(NIBAN,"定数2");
echo ITIBAN."
";
echo NIBAN;



(9)「月」「火」「水」…「日」までの配列を作成し、全て表示する

$y = array(
"日曜日"
,"月曜日"
,"火曜日"
,"水曜日"
,"木曜日"
,"金曜日"
,"土曜日"
);

for ($i=0; $i < count($y); $i++) {
echo "{$y[$i]}です
";
}



(10)「メソッドAが実行されました」と表示するメソッドを含むオブジェクトを作成する

class moo {
function methodA() {
echo "メソッドAを実行します";
}
}

$mos = new moo;
$mos->methodA();

| ホーム |

カレンダー

07 | 2017/08 | 09
- - 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 31 - -

最近の記事

月別アーカイブ

タグリスト

ブログ内検索

カテゴリー

RSSフィード

リンク

ブロとも申請フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。