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
$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
■データの読み込み
プログラムに外部からのデータを読み込む際のあれこれが下記。
・webページ
インターネット経由でamazonから商品を読み込みランダムでおすすめを表示する、ツイッターで特定のつぶやきを取得する、等。
・データベース
データベースシステムよりSNSの会員情報を取得したり、
通常のPCのように、txtやjpgなど、ファイルとして保存されたデータを読み込む。
・標準入力
<option>1才</option>
<option>2才</option>
<option>3才</option>
<option>4才</option>
<option>5才</option>
PHP復習2
■if文による条件分岐
例1
> 右辺よりも左辺のほうが大きい
< 右辺よりも左辺の方が小さい(未満)
>= 右辺よりも左辺の方が大きいか等しい
<= 右辺よりも左辺の方が小さいか等しい
!= 右辺と左辺が等しくない
PHP復習
■はじめに
最近話題になった恋愛SLG: プログラミングで彼女をつくる|paizaオンラインハッカソン7の運営元から楽しく学べる動画学習コンテンツを発見したので、復習も兼ねて受講してみました。無料。受講した動画はITプログラマー・エンジニア転職のpaizaのPHP入門編1です。
■PHP(ピーエイチピー)とは
主に動的なwebサービス、webサイトを作るためのプログラミング言語。動的の対義語は静的で、こちらはHTMLがそれにあたる。
■開始タグ・終了タグ
・開始タグ:<?php
・終了タグ:?>
例1
<?php
//この部分にプログラムを書いていく
?>
この2つに囲まれた部分が、phpとして実行される。
■echo(エコー)
文字列や数字を出力する命令。
例2
<?php
echo = "hello world";
?>
間違いやすいポイント
・行末の ; (セミコロン)の打ち忘れ
・ ; (セミコロン) と : ( コロン )の打ち間違い
・半角スペースを全角で打ってしまう
・ " ( ダブルクォーテーション ) を全角で打ってしまう
■コメントアウトのやり方
例3
<?php
echo "彼女をカスタマイズって良い響き";
/*
こんなことを言う大人になってはいけない。
絶対に駄目だ。
*/
?>
例1のように「//(スラッシュスラッシュ)」と書くと、その行のそれ以降の部分をコンピュータが無視して処理をしてくれる。複数行に渡ってコメントを入れたい場合、例2のように/*と*/で囲めば、同様に処理される。
このように、あとでコードを読んだときにわかりやすいようにメモを残すことができる。コメントを残すことをコメントアウトすると言う。
例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円です。
■まとめ
プログラミングの学習方法として、動画を見ながらブラウザ上でコードを書けて、なおかつ出力まで簡単にできる・・・楽しかったです。今では一般的になったと思いますが、本だけで学習するより圧倒的に時間を短縮できると感じました。コンテンツは現在PHPとRubyのみなので、是非他の言語バージョンも作って欲しいです!
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を明記しておくのがポイント。