PHP復習4

前回の続き。PHP入門編4。今回は配列の基礎、explodeを学びます。

 

■配列について

 

・array関数

array("要素1","要素2","要素3..."

様々な要素を配列に加えることができる。また、変数や数字も要素として代入できる。

 

・print_r関数

print_r(変数) 

配列の中身をすべて出力する。配列だけではなく、変数の中身も出力できる。配列の中身を確認する、デバッグでの利用がメインになる。

 

・添字(key番号)

配列に入れたものは、自動的に添字が振られる。番号は0から始まる。

 

例1

 

<?php

$name1 = くま;

$team = array("ムササビ", "モルモット", $name1, 28);

print_r($team);

?>

 

出力

Array

(

     [0] => ムササビ

     [1] => モルモット

     [2] => くま

     [3] => 28

)

 

・特定の要素のみを出力したい場合

echo 配列[添字];

print_rではなくechoを使う。例1のプログラムでくまだけを出力したいなら、echo $team[2];となる。

 

 

■配列の要素の追加、上書き、削除方法

 

・追加

変数[] = 要素名 

複数追加したい場合、その文を上記の追加式を書けば追加される。また、array関数で配列への代入を行っていなかった場合でも、この追加式だけ配列は生まれる。それが例2になる。

 

例2

<?php
$nuigurumi[] = "パンダ";
$nuigurumi[] = "猫";
$nuigurumi[] = "ネズミ";
print_r($nuigurumi);
?>

 

出力

Array

(

     [0] => パンダ

     [1] => 猫

     [2] => ネズミ

)

 

・上書き

変数[添字] = 上書きしたい要素名

例2のプログラムでkey番号1を犬に変えたい場合、$nuigurumi[1] = "犬";を追加すれば上書きされる。

 

・削除

unset(変数[削除したい添字])

上書き同様、例2のプログラムで猫を削除したい場合、unset($nuigurumi[1])を追加すれば削除される。その際の出力は下記のようになる。

 

出力

Array

(

     [0] => パンダ

     [2] => ネズミ

)

 

このように、unsetを使って要素を削除した場合、指定した添字が歯抜けになってしまう。0,1...のように、自動的に繰り上がりはしないので注意。

 

 

■文字列の分割、集計

 

・explode関数

配列名 = explode("分割に使用する文字", 分割したい文字列)

文字列を特定の文字で分割し、配列に格納する。例えば、CSVのようにカンマ区切りのデータがあった場合、カンマで分割し、配列に代入する、ということができる。

 

例3

 

入力

がじゅまる,パキラ,ヘデラ

 

<?php

$input = trim(fgets(STDIN));

$plant = explode(",", $input);

print_r($plant);

?>

 

出力

Array

(

     [0] => がじゅまる

     [1] => パキラ

     [2] => ヘデラ

)

 

このように、カンマが区切られた形で配列に代入される。例えば入力が/で区切られていた場合、$plant = explode(",", $input);を$plant = explode("/", $input);にすることで同様の処理がされる。

 

・集計

echo count(変数)

指定した変数の要素数を出力することができる。例3のプログラムにecho count($plant);を追記した場合、出力に3が追加される。

 

 

■データの格納

標準入力で与えられたデータを配列に格納する方法。標準入力が何行かわからない場合でも、すべての行を所得する方法。

 

・標準入力からデータが取得できる限りループする(入力が空になるまで)

 

例4

 

入力

ローズマリー

コーヒー

シルバースター

 

<?php

$input = trim(fgets(STDIN));

while($input){

     $plant2 = $input;

     $input = trim(fgets(STDIN));

}

print_r($p;ant2);

?>

 

出力 

Array

(

     [0] => ローズマリー

     [1] => コーヒー

     [2] => シルバースター

)

 

これで、標準入力のすべてのデータが格納された、となる。

 

・取得途中に空白(改行)があった場合の格納方法

 

入力

ローズマリー

コーヒー

 

シルバースター

 

 

例4のプログラムの場合、上記入力のように空白(改行)があった場合、ループが3行目に入った時点で空白と判断し、処理を止めてしまう。なぜなら、標準入力の処理の部分にtrim()を使っている為、改行を取り除いてしまっているからである。なので、データを取得する際ではなく、配列に代入される際にtrim()を使う。それが例5になる。

 

例5

 

入力

ローズマリー

コーヒー

 

シルバースター

 

<?php

$input = fgets(STDIN);

while($input){

     $plant2 = trim($input);

     $input = fgets(STDIN);

}

print_r($p;ant2);

?>

 

出力

Array

(

     [0] => ローズマリー

     [1] => コーヒー

     [2] => 

     [3] => シルバースター

)

 

このように記述することで、空白でもループ処理を終えず、最終行まで値を取得できる。

 

・よりスマートに書くには

例5のプログラムの場合、入力データを取得する同一のコードが2箇所入っている。これをwhile文の受験式の部分に代入することにより、同様の処理・出力が得られる。

 

例6

<?php

while($input = fgets(STDIN)){

     $plant2[] = trim($input);

}

print_r($p;ant2);

?>

 

 

■応用

・配列を使ったランダムくじ引き

以前書いたrand変数を使ったくじ引きと違い、参加人数が変わった場合でもrand変数が可変する、というプログラムの書き方。

 

入力

くま

モルモット

ムササビ

ネズミ

 

<?php

$input = trim(fgets(STDIN));
$member = explode(",", $input);
$max - count($member)-1;
$key = rand(0,$max);
echo $member[$key];
?>

 

出力

入力内の誰か

 

プログラム4行目で、配列に含まれる数字-1と書いている。これは、配列が0から始まるのに対し、入力人数のカウントが1から始まる、つまりcount($member)-1と書くことでメンバーの最大数を表すことができるからである。

PHP復習3

前回の続き。PHP入門編3

 

■データの読み込み

プログラムに外部からのデータを読み込む際のあれこれが下記。

 

・webページ

インターネット経由でamazonから商品を読み込みランダムでおすすめを表示する、ツイッターで特定のつぶやきを取得する、等。

 

・データベース

データベースシステムよりSNSの会員情報を取得したり、

 

ファイルシステム

通常のPCのように、txtやjpgなど、ファイルとして保存されたデータを読み込む。

 

・標準入力

ファイルシステムの一種。下記で説明。
 
 
■標準入力
 
・fgets(STDIN)
標準入力されたデータをプログラムの方で取得するのにtgetsという関数を使う。
 
 
例1
 
入力値
hello paiza
 
<?php
$input = fgets(STDIN);
echo "標準入力値:".$input;
?>
 
このような場合、出力値は下記になる。
 
標準入力値:hello paiza
 
 
・入力値が2行以上の場合
fgets(STDIN)は1行ずつしか値を読み込まない。例えば入力を下記のように2行にした場合。
 
入力値
5
4
 
これを例1のプログラムで出力すると、「標準入力値: 5」としか出力しない。
2行目を読み込みたい場合が例2。
 
例2
 
<?php
$input = trim(fgets(STDIN));
$input2 = trim(fgets(STDIN));
echo "標準入力値:".$input."\n";
echo "標準入力値2:".$input2."\n";
echo $input+$ainput2;
?>
 
このように書く。複数行の場合は、それぞれ\nを入れることで、連続して表示されてしまうことを防げる。
また、入力値自体に改行コードが含まれているので、そのままだと改行が2回入ってしまう。このような場合は、出力側の改行を取るのではなく、変数側の改行を取るようにする。何故なら、変数は様々な場合で使う場合が多いので、意図しない改行が入っていると後々バグに繋がってしまう。よって、値を出力するときに取り除く。
 
・trim
この関数で、文字列の前後に入ってる半角スペースや、改行コードを取り除くことができる。

 

■while文によるループ処理
 
・while文の基本式
 
<?php
while(ループを続ける条件式){
    //繰り返し実行する処理
}
?>
 
もし()の条件式が成り立つ場合は//の処理を実行し、繰り返す。もし1~10を出力したい場合は例3になる。
 
例3
 
<?php
$i = 1;
while($i <= 10){
    echo $i;
    $i++;
}
?>
 
この際、$i++を書かないと、永遠にループ処理が続く。このようにループから抜け出さないプログラムを実行すると、cpuを占有してしまうので注意。
また、$Iのようにループの数を数える変数のことをカウンタと言う。カウンタの変数はなんでもいいが、$iや$jが使われることが多い。
 
・年齢入力フォームでの利用例
 
例4
 
<select name="age">
  <option>1才</option>
  <option>2才</option>
  <option>3才</option>
  <option>4才</option>
  <option>5才</option>
</select>
 
このような年齢入力フォームを作りたいとき、これをHTMLで100才まで作るとなると、膨大なコピペ&年齢の書き換え作業が必要になる。これをプログラムによって自動化したい場合が例5.
 
例5
 
<select name="age">
<?php
$i = 1;
while($i <= 100){
    echo "<option>".$i."才</option>";
    $i++;
}
?>
</select>
 
 
■for文によるループ処理
 
for(初期化式; 条件式; 変化式){
//繰り返し実行する処理
}
 
1から10を出力する同じ処理をwhileと比較すると例6になります。
 
例6
 
<?php
for($i = 1; $i <= 10; $i++){
    echo $i."\n";
}
?>
 
<?php
$i = 1;
while($i <= 10){
    echo $i."\n";
    $i++;
}
?>
 
数学で値を求めるときに様々な計算方法があるのと同じで、書いていることは同じだということがわかると思います。よりスマートに計算しただけです。
 
■for文の応用
西暦と平成の対応表を例7に書いてみます。
 
例7
 
<?php
for($year = 1989; $year <=2015; $year++){
    $heisei = $year - 1988;
    echo "西暦".$year."年は平成".$heisei."年です\n";
}
?>
 
平成元年の1989年~2015年までをループで出力する
ループの各西暦年出力時に平成年を計算して出力する
1989 + x = 1
x = 1 - 1989
x = -1988
よって、$heiseiは$year - 1988になります。

PHP復習2

前回の続き。PHP入門編2

 

■if文による条件分岐

 

<?php
// if文による条件分岐
if(条件式){
    //条件式が成り立った時の処理
}elseif(条件式2){
    //条件式2が成り立った時の処理
else{
    //条件が成り立たなかった時の処理
}
?>
 
・if = もし
・(条件式) = ●●●が○○○だったら
・elseif = (条件式2)
・else = そうではなかったら

 

例1

<?php
$n = rand(1,3);
if($n == 1){
    echo "好き";
}elseif($n == 2){
    echo "どちらとも言えない";
}else{
    echo "嫌い";
}
?>
 
$nは1~3のどれかランダムで決まる。もし$nが1だったら好きと出力する。2だったらどちらとも言えないと出力する。どちらでもなかったら嫌いと出力する。
と、なる。elseifは何回でも使える。
 
 
■比較演算子
 
if文などの条件式の中で、右辺と左辺を比較するときに使う。
 
== 右辺と左辺が等しい
> 右辺よりも左辺のほうが大きい
< 右辺よりも左辺の方が小さい(未満)
>= 右辺よりも左辺の方が大きいか等しい
<= 右辺よりも左辺の方が小さいか等しい
!= 右辺と左辺が等しくない
 
例2
<?php
// おみくじを作る
$omikuji = rand(1,10);
//echo $omikuji;
if($omikuji == 1){
    echo "大吉";
}elseif($omikuji == 2){
    echo "中吉";
}elseif($omikuji <= 4){// 3,4
    echo "小吉";
}elseif($omikuji <= 7){// 5,6,7
    echo "凶";
}else{
    echo "大凶";
}
?>
 
$omikujiは1~10の中でランダムに選択される。もし1が出たら大吉、2が出たら中吉、4以下だったら小吉、7以下だったら凶、それ以外は大凶、となる。上から順番に読み込まれるので<=4の部分で1と2は含まれない。
 
 
■おまけ
 
ローカル(プログラム実行環境)の日付/時刻を書式化する。
 
 

PHP復習

■はじめに

最近話題になった恋愛SLG: プログラミングで彼女をつくる|paizaオンラインハッカソン7の運営元から楽しく学べる動画学習コンテンツを発見したので、復習も兼ねて受講してみました。無料。受講した動画はITプログラマー・エンジニア転職のpaizaPHP入門編1です。 

 

PHP(ピーエイチピー)とは

主に動的なwebサービス、webサイトを作るためのプログラミング言語。動的の対義語は静的で、こちらはHTMLがそれにあたる。

 

■開始タグ・終了タグ

・開始タグ:<?php

・終了タグ:?>

 

例1

<?php

//この部分にプログラムを書いていく

?>

 

この2つに囲まれた部分が、phpとして実行される。

 

■echo(エコー)

文字列や数字を出力する命令。

 

例2

<?php

echo = "hello world";

?>

 

間違いやすいポイント

・行末の ; (セミコロン)の打ち忘れ

・ ; (セミコロン) と : ( コロン )の打ち間違い

・半角スペースを全角で打ってしまう

・ " ( ダブルクォーテーション ) を全角で打ってしまう

 

コメントアウトのやり方

 

例3

<?php

echo  "彼女をカスタマイズって良い響き";

/*

こんなことを言う大人になってはいけない。

絶対に駄目だ。

*/

?>

 

例1のように「//(スラッシュスラッシュ)」と書くと、その行のそれ以降の部分をコンピュータが無視して処理をしてくれる。複数行に渡ってコメントを入れたい場合、例2のように/*と*/で囲めば、同様に処理される。 

このように、あとでコードを読んだときにわかりやすいようにメモを残すことができる。コメントを残すことをコメントアウトすると言う。

 

PHPとHTMLの共存

 

例4

<b>

<?php

echo  "世界と共存するのは難しい”;

?>

</b>

 

PHP開始タグの手前、後ろ、または挟むような形で、HTMLを共存させることができる。HTMLタグについては割愛する。

 

 

 

■変数を出力する

$の後に好きな英数字を入力することで、変数を使える。僕はHTMLから始めたので、classやidを振ることに似てるなと思った気がします、当時。定義するという意味で。

 

例5

<?php

$chiisai = "正義";

?>

 

=は代入演算子で、右辺を左辺に代入するということになる。例5の場合、chiisaiことは正義なんだ、ということになる。これを出力する場合が例5になる。

 

例6

<?php

$chiisai = "正義";

echo $chiisai;

?>

 

このように書くことで「正義」と表示される。

 

■変数を繋げて出力する 

.(ドット)で繋げることで、複数の変数を繋げて出力することができる。

 

例7

<?php

$chiisai = "正義";

$ookii = "悪とは限らない";

echo $chiisai."、いや、".$ookii;

?>

 

「正義、いや、悪とは限らない」になる。上記のように、ダブルクォーテーションで囲むことで、変数ではないものとの共存もできる。

 

■rand 

ランダムで数字を出力するための関数。

 

例8

<?php

rand(1,6);

?>

 

このように、randの後に()を書き、その中に最小値、コンマ、最大値の順番で書く。例8の場合、1~6のどれか、ということになる。この1~6のことを引数と言う。これを応用すると例9のような使い方ができる。

 

例9

<?php

$rand_num = rand(147,153);

echo $rand_num."cmか・・・いいね。"

?>

 

演算子 

・代入演算子:=

右辺を左辺に代入する。右辺をダブルクオーテーションで囲むと、文字列を代入する、ということになる。数字の場合は囲う必要がない。囲んだ場合コンピュータ側も文字列として処理し、囲わない場合は数字として処理する。例10のようになる。

 

例10

<?php

$a = "文字";

$b = 149;

?>

 

・代数演算子

+、-、*(かける)、/(割る)、%。

 

例11

<?php

echo 3+2;

?>

 

例10の場合、5と表示される。変数を使って計算することもできて、それが例12になる。

 

例12

<?php

$a = 4;

$b = 5;

echo $a+5;

echo $a*$b;

echo 3 * (4 + 5);

echo 87 * ($b - $b)."cmの双子山”;

?>

 

例12のように変数+数字でも、変数のみでも計算することもできる。また、()を使っての計算、文字列との共存もできる。この場合の出力は、上から9、20、27、87cmの双子山、になる。

 

・単項演算子

 

例13

<?php

$a = 6;

$b = 7;

$a++;

echo $a;

$b--;

echo $b;

?>

 

変数の後に++もしくは--を入れることで、値を変えることができる。++の場合は+1、--の場合は-1。例13の場合、出力は7、6になる。

 

■改行

\nと入力することで改行される。

 

例14

<?php

$yachinn = 90000;

$tuki = 12;

$total =$yachinn*$tuki;

echo "家賃:".$yachinn."円\n";

echo "1年で支払う回数:".$tuki."回\n";

echo "合計".$total."円です。";

?>

 

この場合の表示は下記になる。

 

家賃:90000円

1年で支払う回数:12回

合計1080000円です。

 

 

■まとめ

プログラミングの学習方法として、動画を見ながらブラウザ上でコードを書けて、なおかつ出力まで簡単にできる・・・楽しかったです。今では一般的になったと思いますが、本だけで学習するより圧倒的に時間を短縮できると感じました。コンテンツは現在PHPRubyのみなので、是非他の言語バージョンも作って欲しいです!

CSSの基礎:リンクの色を指定する

*リンクテキストの色を変更する

 

a:link{

color:#6a8125;

}

a:visited{

color:#990099;

}

a:hovar{

color:#f3a42c;

}

a:active{

color:#cc0000;

}

 

・a.link

リンク先が未訪問のとき

・a:visited

リンク先が訪問済みのとき

・a.hover

ポインタなどが乗っているとき

・a:active

リンクをクリックしているとき

 

それぞれに値を記述することで、色の指定が出来る。

CSSの基礎:ページをデザインする方法

*背景画像を設定する

 

#header{

background-image:url(img/header.png);

}

 

・background-image

背景画像を指定する為のプロパティ。url();の間に画像へのパスを記述する。

 

・background-repeat プロパティ

繰り返しの有無、繰り返す方向を指定する為のプロパティ。この指定が無い場合、背景画像は縦横に繰り返される

:no-repeat

繰り返さない

:repeat-x

横方向に繰り返す

:repeat-y

縦方向に繰り返す

 

 

*箇条書きの見た目を変更する

 

多くのブラウザでは、li要素の先頭には・(ブレット)が自動的に表示される。不要な場合、list-style-typeプロパティで非表示にする。

 

#menu ul{

list-style-type:none;

}

 

list-style-type プロパティ

ブレットのスタイルを指定する為のプロパティ。

 

:none

ブレットなし

:disc

黒丸

:circle

白丸

:square

黒四角

:lower-roman

ローマ数字(小文字)

:upper-roman

ローマ数字(大文字)

:decimal

数字

:lower-alpha

小文字のアルファベット

:upper-alpha

大文字のアルファベット

 

・background-position プロパティ

背景画像の表示開始位置を指定する為のプロパティ。この指定が無い場合、左上から表示開始となる。

:100px 100px;

左から100px、上から100pxの位置から

:left bottom;

左寄せ、下寄せ

:right center

右寄せ、中央寄せ

 

 

*テキストや画像の周りに余白を付ける

 

#header{

padding-top:28px;

padding-left:32px;

}

 

padding プロパティ

余白を付ける為のプロパティ。paddingプロパティで指定した余白には、backgroundプロパティで設定した背景が表示される。

 

・margin プロパティ

余白を付ける為のプロパティ。paddingプロパティはborderより内側の余白なのに対し、marginプロパティはborderの外側の余白を表す。

 

両プロパティ共に、

-top、-right、-bottom、-left

上記左から、内容の上、左、下、右方向に付く余白を指定出来る。また、

10px 10px 10px 10px ;

のように上から時計回りで記述することも出来る。

 

*リンク画像に付いた枠線の変更

 

img{

border‐style:none;

}

 

・border

-style

枠線の種類を指定する為のプロパティ

-color

枠線の色を指定する為のプロパティ

-width

枠線の太さを指定する為のプロパティ

 

・border-style プロパティの値

:none

枠線を表示しない

:solid

実線

:double

二本線

:groove

立体的に窪んだ線

:ridge

立体的に隆起した線

:inset

全体が窪んだように表示され、上と左の枠線が明るく、下と右の枠線が明るい色になる

:outset

全体が隆起したように表示され、上と左の枠線が明るく、下と右の枠線が明るい色になる

:dashed

破線

:dotted

点線

 

 

HTMLの基礎3:divによるグループ化

*<div>タグ

divは、タグ自体に意味はないが、idやclassと組み合わせてグループ化することで、編集が容易になる。ヘッダー、メニュー、コンテンツなど、同じ背景色で塗られてるパーツや、同じ意味を持つコンテンツでまとめるといいだろう。

 

例:

<div id="container">

...

<div id="header">

...

</div>

<div id="menu">

...

</div>

<div id="content">

...

<div id="footer">

...

</div>

</div>

</div>

 

*幅と高さ、左右配置の設定

例:

#container{
①width:②900px;
}
#header{
①height:②140px;
}
#menu{
width:265px;
③float:➃left;
}
#content{
width:635px;
③float:➃right;
background-color:#ffffff;
}

 

①width

幅を指定する為のプロパティ。

②px

幅を表す単位。他にも、%などがあり、数値+単位によって表す。

③float

左右に寄せて配置する為のプロパティ。

➃left,right

③の数値になる部分。例のように、floatを使う場合は同時にwidthを明記しておくのがポイント。