期間限定

キャンペーン中

体験授業申込

2023秋の発表会 Engineer賞受賞者インタビュー

2023年10月21日(土)から29日(日)にかけて、プログラミング教室TETRA UP四谷本校にて、自作ゲームの発表会を開催しました。


今回は見事にEngineer賞を受賞者した 江島 俊瑛さんのインタビューをお届けします。
江島さんは佐賀からオンラインで受講していただいており、今回制作したプロジェクトは、佐賀プログラミングアワード2023への出展もいたしました。見事、12名のみが進むことができる県大会の本選出場へと進められる評価もいただく結果となりました。

→TETRA UPが育む4つの力 「ENGINEER」- 新時代に欠かせない実践的なスキルを –

いつも素晴らしい自作ゲームを見せてくれる江島さん

受賞した感想を聞かせてください。

江島さん: 単純に嬉しかったです。僕が作ったゲームは戦う系ではなかったので、万人受けするタイプのものではないと思いますが、受賞してよかったと思います。


今回のゲームでこだわった所はどんなところですか?

江島さん: アイテムや整備の部分にはすごくこだわりました 。



普段からプログラミングを行う上で、気を付けていることはありますか?

江島さん:プログラムミスです。


エラー等、うまくいかない時にはどうしてますか?

江島さん:自力で何とかする場合が多いです。
まずネットで調べて、その方法を片っ端からやってみる。
それでも直らなかったら設定や見直してみて、それでも場合に先生に聞くようにしてます。


プロミングで楽しいと思う時は、どんな時ですか?

江島さん: 自分が書いたプログラムが動いた瞬間が、一番楽しくて嬉しくて、気持ちがいいですね。



プログラミングを使って次に作りたいものはありますか?

江島さん:将来的にはフォートナイトやドラクエなどのいわゆる神ゲーを作りたいです。自作の3Dモデルなどを使用したゲームも作りたいと思います。


将来の夢を教えてください。

江島さん:僕はたくさんの事をネットから学んでいます。そのネットで自分が得た知識を分かりやすくして、ネットでみんなにお返しできたらいいなと思います。
夢はもちろんプログラマーになりたいです!

ありがとうございました。
今後もどんどんスキルアップしていく江島さんの作品に期待しています!

江島さんの作品や、発表会に参加された生徒さんの作品は下記からご覧いただけます。

江島さんの作品:forest cleaning

生徒さん作品ページ:https://tetraup.com/education/works



TETRA UPでは江島さんのようにONLINEの方も、多く受講いただいております。
体験授業や入会金などが無料になる、お得なキャンペーンも実施していますので、この機会に体験教室に是非ご参加ください。

詳細は↓をクリック

2023秋の発表会 Speaker賞受賞者インタビュー

2023年10月21日(土)から29日(日)にかけて、プログラミング教室TETRA UP四谷本校にて、自作ゲームの発表会を開催しました。


今回は見事にSpeaker賞を受賞者した 山口 駿亮さんのインタビューをお届けします。

山口さんは今回制作したプロジェクトはプログラミングスタジアムへも出展いたしました。 最初はなかなか出展への1歩が踏み出せなかった山口さんですが、出展を決めると今まで以上にイラストやキャラクターの動きにこだわりを見せてくれ、ゲームクリアやオーバー等、細かなゲーム性にもやる側の立場になって考えることができました。

授業でもできる部分は自分で試行錯誤し、うまくいかない時に先生に声をかけるその姿勢は、とても素晴らしいと感じています。

→TETRA UPが育む4つの力 「SPEAKER」-あいてを想い、じぶんを伝える力を-

山口さんの自作のキャラクターは、会場でも人気でした!

受賞した感想を聞かせてください。

山口さん:お掃除ロボットがもらえたので嬉しいです!


発表する時に、何か気を付けていた所などはありますか?

山口さん: 声の大きさを気を付けました。ちゃんと聞こえるように、説明が皆に分かるように意識しました。


昨年はオンラインでの参加でしたが、今回初めての教室での発表です!

絵も全て自分で制作しましたね。大変ではなかったですか?

山口さん: 絵を描くのが好きなので、大変ではなかったです。
Scratchにもう少し可愛いキャラクターがいたらいいなと思います。


プログラミングを使って次に作りたいものはありますか?

山口さん: 戦いのゲームの他に、お金を集めるゲームも作ってみたいです。



将来の夢を教えてください。

山口さん: 今はまだ決めていないです。 


ありがとうございました。

山口さんの作品や、発表会に参加された生徒さんの作品は下記からご覧いただけます。

山口さんの作品:猫の冒険

生徒さん作品ページ:https://tetraup.com/education/works


今後も素晴らしいアイディアとゲームの制作を期待しています!



ただいまTETRA UPでは体験授業や入会金などが無料になる、お得なキャンペーンを実施しています。
この機会に体験教室に是非ご参加ください。

詳細は↓をクリック

2023秋の発表会 総合賞受賞者インタビュー

2023年10月21日(土)から29日(日)にかけて、プログラミング教室TETRA UP四谷本校にて、自作ゲームの発表会を開催しました。


今回は見事に総合賞を受賞者した 三科 亮太さんのインタビューをお届けします。
三科さんは本校に約5年通塾いただいており、受賞は2度目となります。
今回制作したプロジェクトは、外部プログラミング大会への出展もいたしました。三科さんの好きな鉄道をテーマに、「素敵な路線を、廃線から守りたい」という思いから制作がスタートし、夏休みは実際に北海道まで現地視察まで行いました。部活動やテストも多い中で、自宅制作も進める文武両道な姿に、私たちも非常に感心しました。


総合賞はTETRA UPが育む4つの力を、普段の授業及び発表会までの過程を総合的に判断し、授与いたしました。

→TETRA UPが育む4つの力

堂々とした発表、素晴らしかったです!

受賞した感想を聞かせてください。

三科さん:外部の大会にも出すことを視野に入れた作品で、いつもより力を入れて、思いを込めた作品なので受賞出来て嬉しいです。


外部の大会に出したとのことですが、作品を作る上で気を付けたことはありますか?

三科さん: 自分だけが分かるような形ではなく、相手にも伝わるように、自分よがりな作品やスライドにならないように気を付けました。



学校の部活やテスト、通学時間などもあるなかでどのように両立させましたか

三科さん: 電車の中で、iPadを使い文章を考えたり通学時間を有効活用しました。自宅では宿題などをだらだらしないように、時間を決めて行いました。


プログラミングを使って次に作りたいものはありますか?

三科さん: プログラミングで、プログラミングすることを簡単にしたいです!Scratchをやっていた頃に、Scartchのブロック1つ1つも結局はコードの集まりなんだと知ってから、ずっと思っていました。



将来の夢を教えてください。

三科さん: テクノロジーが進化していく中でも、遅れを取らずに普通に過ごしたいです。



ありがとうございました。

三科さんの作品や、発表会に参加された生徒さんの作品は下記からご覧いただけます。

三科さんの作品:大赤字の釧網本線、復活させるには?

生徒さん作品ページ:https://tetraup.com/education/works



鋭い着眼点を持ち、スキルもどんどん成長する三科さんに今後も期待しています!

TETRA UPでは体験授業や入会金などが無料になる、お得なキャンペーンも実施していますので、この機会に体験教室に是非ご参加ください。

詳細は↓をクリック

2023秋の発表会 Solver賞受賞者インタビュー

2023年10月21日(土)から29日(日)にかけて、プログラミング教室TETRA UP四谷本校にて、自作ゲームの発表会を開催しました。


今回は見事にSolver賞を受賞者した 西田 圭吾さんのインタビューをお届けします。

西田さんは「いつもやっている3DのゲームをScratchで再現したい」という思いから、Scratchで3Dゲームを再現することに挑戦しました。
難しい説明にも諦める事無く、しっかりと耳を傾けて制作を続け、先生の問いにも的確に言語化し伝える事が出来ました。
「完成していないから発表はしたくない」と最後までやり抜こうとする姿勢は、私たちも素晴らしいと感じました。

→TETRA UPが育む4つの力 「SOLVER」- 実現したいゴールまで論理的な道筋を –

受賞を見事、有言実行した西田さん!

去年の発表会時に「次は賞を取る」と言っておりましたが、見事に実現されましたね!受賞した感想を教えてください。

西田さん:3Dは難しかったけど、受賞できて嬉しいです。


ゲーム作る時やプログラミングをする時に気を付けていることや、意識していることはありますか?

西田さん:キャラの移動など基本の動きでエラーが出ないように、気を付けています。



難しいと感じた時、どのように進めていきますか?

西田さん:自分で色々動きを試してみて、それでもできない時は先生に聞いて進めるようにしています。


プログラミングで実現させたいことなどはありますか?

西田さん:スイカゲームを作ってみたいです !


いつも一緒に通っている竹山さんと一緒に!

今回のゲームは未完成でしたが、今後完成させる予定はありますか?

西田さん:あります!


去年は将来の夢は考古学者と答えていましたね。1年たった今、将来の夢を教えてください。

西田さん:バスケット選手になりたいです。


ありがとうございました。

これからもどんどんバスケもプログラミングも、スキルを伸ばしてくださいね!



ただいまTETRA UPでは体験授業や入会金などが無料になる、お得なキャンペーンを実施しています。
この機会に体験教室に是非ご参加ください。

詳細は↓をクリック

子ども達の個性が光る!2023年秋のプログラミング発表会を開催しました

2023年10月、子ども向けプログラミング教室 TETRA UPでは、子ども達の個性と才能が輝く自作ゲームの発表会が開催されました。
発表会までに、計画を練り、試行錯誤を繰り返しながら作品を仕上げたら、分かりやすくスライドにまとめ、本番に臨みました。
たくさんの準備を行ったこの発表会では、子ども達の成長と創造力を肌で感じることができ、プログラミング教育の魅力が詰まった素晴らしい一日となりました。この記事では、発表会前の準備から当日の様子まで、その道のりをお伝えします。


発表会までの準備


発表会の準備には約3~4ヶ月ほどの時間をかけて制作を行いました。
まずは 実現したいゴールまで論理的な道筋を立てて制作に取り組んでもらうために、「発表会計画シート」の記入を行います。

計画通りに進められなかった時には、講師と一緒にどのように軌道修正するかまで考えることができました。


発表会当日の様子


発表はロボットコーススクラッチコースUnityコースの3コース合同で行いました。

それぞれの発表が終わった後に、ゲームで遊ぶ時間を設け、感想シートにゲームの見た目の良さや完成度、発表の姿勢等の感想を記入しました。
「どうしたら楽しんでもらえるだろう?」と、客観的に捉えることが出来たのではないかと思います。

さらにゲームの質疑応答の時間も設け、生徒のみならず保護者や講師からの質疑にも堂々と答えることができていました。


それでは、発表会の様子を一部ご紹介します。

当日はみんな緊張した様子を見せながらも、準備した成果をしっかりと発表できていたと思います。

お互いのゲームで遊ぶ際も遊び方をレクチャーしたり、コツを教えたりとそれぞれコミュニケーションを取り理解が深まった発表会となりました。


受賞者


Speaker賞


山口 駿亮さん

スクラッチで敵を倒しながら、猫がゴールを目指すゲームを作った山口さん。ここのシーンは強すぎるかな?、こんな風にしたらおもしろいと思う!と、ゲームをする人をしっかりと考え、完成させることができました。登場するキャラクターも全て自作し、見た目からとても引き付けられる、こだわりのゲームが出来ました。

山口さんの受賞インタビューはこちら


Thinker賞


濱 雪菜さん

スクラッチで妖精がハリネズミを倒し、得点を稼ぐゲームを作成した雪菜さん 。オンライン授業を進める中で、PCの操作が分からない時は、きちんと言語化し分からない部分を伝え、講師のプログラミングの説明も言葉のみで理解しようと努めることが出来ていました。初めての発表も堂々とした姿勢で行うことができました。

濱さんの受賞インタビューはこちら


Engineer賞


江島 俊瑛さん

Unityで森林を育てるゲームを作成した江島さん。進められる部分は自宅で進め、分からないことを授業で確認するというスタイルで制作をしていくことで、日に日にスキルアップをしています。オープニングやアイテム等、細部のイラストまで自作し、こだわりの詰まった作品ができました。

江島さんの受賞インタビューはこちら


Solver賞


西田 圭吾さん

スクラッチで3Dアクションゲームを作った西田さん。作品は未完成とのことでしたが、2DのScratchから3Dを表現した作品を見た会場からは「おぉ…」と、驚きの声があがりました。「難しくても頑張る」と諦めずに頑張り、制作をひたむきに進めてくれました。

西田さんの受賞インタビューはこちら


総合賞


三科 亮太さん

Unityで鉄道会社の経営ゲームを作った三科さん。素敵な鉄道を後世に残したいという思いから思いついたこの作品。 プログラミング大会への提出も兼ねて、ゲームやスライドも「思いを伝える」という事がとても意識された作品でした。自宅でもプログラミングを行うことで、スキルもグンと成長したように思います。

三科さんの受賞インタビューはこちら


終わりに


子どもたちの個性が輝き、 どの作品も素敵な作品ばかりで、 2023年秋のプログラミング発表会は皆大成功で終了しました。
この発表会から、子どもたちが持つ無限の可能性を改めて感じ、プログラミング教育の価値を再確認しました。

生徒さんたちが未来のテクノロジーリーダーとして輝かしい道を歩んでいくことを楽しみにしています。



【ただいま体験教室無料キャンペーンを実施中】

ただいまTETRA UPでは体験授業や入会金などが無料になる、お得なキャンペーンを実施しています。
この機会に体験教室に是非ご参加ください。

詳細は↓をクリック


非エンジニアでも知らないとヤバイPHP Part10〜関数について理解しよう〜

前回はPHPの繰り返し処理について説明しました。今回はPHPの関数について説明いたします。

関数とは

PHPの関数に入る前に「関数」についておさらいしておきましょう。
皆さま、関数と聞くと何を思い浮かべますか…筆者は中学校に入学した際の数学を真っ先に思い浮かべました。数学の関数が苦手で数学に苦手意識を持った方もいるのではないでしょうか。辞書で調べてみると
「 《function》二つの変数xyがあって、xの値が決まると、それに対応してyの値が一つ決まるとき、yxの関数であるという。記号yfx)で表す。xを独立変数といい、二つ以上のこともある。また、この概念を拡張して、ある集合の各要素に他の集合の各要素を一対一で対応させる規則である写像をさすこともある。」
「コンピューターのプログラミング言語やアプリケーションソフトにおいて、ある数や文字列が入力された時、決められた処理を行い、その結果を出力する命令群のこと。※1」
と出てきます…が、正直これでは非常に分かりにくいですね。

関数の具体例1 – 自動販売機 –

関数の具体例として、自動販売機をあげてみます。飲み物、アイス、お菓子やパン、変わったものだとモツ煮お金をお金の投入口に入れて、必要金額が投入されれば、購入する商品を選択するボタンが光り、購入したい商品のボタンを押すと商品と(超過金額があれば)お釣りが返ってくるアレです。
関数 :自動販売機
引数 :入金するお金
返り値:商品とお釣り
消費されるもの:元々のお金(商品を購入する分の金額)

関数の具体例2 – 一次関数 –

次の関数の具体例として、中学校の時に習った一次関数をあげてみます。

PHPでの関数の書き方

では、簡易的ですが実際にPHPでの関数の書き方を見てみましょう。

function 関数名(){
  関数の処理
}

まとめ

関数は実際にプロダクトを実装する際にはもはや必要不可欠です。実際にはフレームワークなどで使うことがメインですが、MVCモデルなどを学んでいくと必ず出てくるので楽しみにしていてくださいね。関数は考え方もプログラミングに必要不可欠なものでありとても便利な機能です。

非エンジニアでも知らないとヤバイPHP Part9〜繰り返し処理について理解しよう〜

前回はPHPの条件分岐について説明しました。今回はPHPの繰り返し処理について説明いたします。

繰り返し処理とは

ある条件が満たされるまで、同じ処理が繰り返し実行される処理」のことを、繰り返し処理(ループ処理)と言います。PHPで繰り返し処理を実装するには、いくつか方法があります。

繰り返し処理の実装方法

具体的な実装方法として、今回は以下の4つをご紹介いたします。

  1. for文
  2. foreach文
  3. while文
  4. do{ }while( )文

for文

for文は繰り返し処理の基本となる構文です。書き方は以下の様になります。

<?php
for(開始条件 ; 継続条件 ; 繰り返し処理終了後の条件変更){
  実施する繰り返し処理 ;
}
?>

for文の( )の中の区切りには「;(半角セミコロン)」を用います。これだけだと非常にわかりづらいと思うので、具体例をみていきましょう。

<?php
for($i = 1 ; $i <= 3 ; $i++){
  print($i);
}
?>

この繰り返し処理では「1 2 3」と表示されます。それぞれ説明します。

開始条件:$i = 1
変数iに1を代入しています。繰り返し処理の変数にはiが使用されることが多いです。諸説ありますが、このiは「integer(整数)」や「index(索引・目盛り)」の頭文字を表しています。今回の開始条件は1としました。

継続条件:$i <= 3
変数iが3以下を表します。変数iが3を超えない限り、{}内の処理は繰り返されます。

実施する繰り返し処理:print($i)
変数iをprint関数で出力しています。

繰り返し処理終了後の条件変更:$i++
変数iに「1を加える」という条件が加わっています。この++の部分ですが
$i = $i + 1(変数への再代入:こちらをご参照)

$i += 1(上の式を省略化した書き方)
と同じです。

従って、$ = 3に加算されるまでは繰り返し処理は実施されます。$i++を実行して$ = 4になった時に初めて継続条件に合致しなくなります。{}の中の処理は実施されず、繰り返し処理が終了することになります。

foreach文(キーを取得しない場合)

foreach文は、配列(配列についてはこちらをご参照)に対する繰り返し処理になります。foreach文が使用できるのは、配列とオブジェクトとなります。他のデータ型に用いるとエラーになりますのでご注意ください。書き方は以下の様になります。

<?php
$array = [値1, 値2, 値3];
foreach($array(配列の変数名) as $value(配列内の要素)){
  実施する繰り返し処理;
}
?>

先ほどのfor文と異なるのは、配列の変数を用意していること、()内に配列の変数名を入れること、配列内の要素($valueの部分、名称は自由に設定できます)に対して繰り返し処理が行われることです。具体的にみていきましよう。

<?php
$fruits = ["りんご" , "みかん" , "バナナ"];
foreach($fruits as $fruit){
  print("好きな果物は" . $fruit . "です。");
  print("今日は" . $fruit . "を食べました。");
}
?>

この繰り返し処理では「好きな果物はりんごです。今日はりんごを食べました。」「好きな果物はみかんです。今日はみかんを食べました。」「好きな果物はバナナです。今日はバナナを食べました。」という結果が表示されます。
流れとしては以下のようになります。

  1. 1 最初に配列の変数$fruitsを定義します。
  2. 2 foreach($fruits ~ は、この部分で定義した配列を取得しています。
  3. 3 ~ as $fruit) は、$fruitsに格納されている配列の最初の要素である「りんご」を$fruitに代入しています。
  4. 4 {}内の繰り返し処理が実施されます。
  5. 5 $fruitに代入された「りんご」の{}内の処理が実施されたら、次の配列の要素である「みかん」でも3.と4.が実施されます。
  6. 6 「みかん」でも3.と4.が実施されたら、次は配列$fruitsの最後の要素である「バナナ」も3.と4.が実施されます。
  7. 7 全ての要素に対して繰り返し処理が完了したら、終了となります。

foreach文(キーを取得する、連想配列の場合)

先ほどのforeach文では、配列にキーが設定されていませんでした。配列のキーも用意されて(連想配列になって)いて、キーも取得したい場合には次のような書き方になります。

<?php
$fruits = ["りんご" => "赤" , "みかん" =>"オレンジ" , "バナナ" => "黄"];
foreach($fruits as $key => $value){
  print($key ."は" . $value . "色です。");
}
?>

こちらは「りんごは赤色です。」「みかんはオレンジ色です。」「バナナは黄色です。」と表示されます。先ほどのforeach文と比較すると「$key =>」が追加されていることがわかります。ここに配列の各要素のキーであるりんご・みかん・バナナが代入され、値の赤・オレンジ・黄は$valueに代入されます。

while文

while文でも繰り返し処理は可能です。書き方は以下のようになります。

<?php
//初期条件
while(条件式){
  実施する繰り返し処理;
  条件を変更する処理;
}
?>

条件式がtrueの場合に{ }内の処理が実行されます。while文は書き方にいくつか注意があります。特に注意していただきたいのは、初期条件と条件を変更する処理に関してです。具体例をいくつか見ていきましょう。

【具体例1】

<?php
$num = 1;
while($num <= 3){
  print($num);
  $num++;
}
?>

問題なく「1 2 3」と出力できると思います。

【具体例2】

<?php
$num = 1;
while($num <= 3){
  $num++;
  print($num);
}
?>

次はどうでしょう。中の繰り返し処理と条件を変更する処理の順番を入れ替えてみました。今度の結果は「2 3 4」と出力されると思います。これはwhile文の中の{}で順次処理されているからです。順を追うと

  1. $num = 1 は$num <= 3がtrueなので{}内の処理が実行される。
  2. $num++ で$numに代入されている値は2になる。
  3. print($num); で2が出力される。

となっています。print関数を用いる前に$numをインクリメント(1を加算)しているため、「2 3 4」となります。4に関しては3より大きいです。ですがこの4は$num = 3の時に{}内の処理に以降した後、$num++で$numに4が代入されるため、print関数を実行して4が表示されることになります。
この様に、実行の順序には注意が必要です。

【具体例3】
 ※こちらは処理が止まらなくなる(無限ループ)ため、実行しないでください。

<?php
while($num <= 3){
  $num = 1;
  print($num);
  $num++;
}
?>

この場合、冒頭に書きましたが処理が止まらなくなります(11111…..)。これは初期条件として使用している$numが、while文の{}内にあることが原因です。

  1. 1 $numに1を代入してprint関数を実行するため、1が表示されます。
  2. 2 その後$num++で$numには2が代入されます。
  3. 3 $num <= 3がtrueです。while文が再度実行されます。{}内の最初に$num = 1;があるため、再度1が代入されます。1.の部分に戻ってしまいます。

【具体例4】
※こちらも処理が止まらなくなる(無限ループ)ため、実行しないでください

<?php
$num = 1;
while($num <= 3){
  print($num);
}
?>

こちらも冒頭に書きましたが、無限ループ処理になります。while文内で条件を更新する処理の記載がありません。$num =1は変更されず、$num <= 3がtrueのままになってしまいます。
具体例を4つ挙げましたが、while文を書く際はいくつか注意していただければと思います。

do{ }while( )文

do{}while()文はwhile文とほぼ同じです。書き方は以下のようになります。

<?php
初期条件
do {
  実施する繰り返し処理
} while (条件式);
?>

while文と1点違うのは、構文の構造上、先に繰り返しの処理を行ってから条件の判定を行うことです。少なくとも1回は条件の処理が実行されます。具体例を見ていきましょう。

<?php
$num = 5;
do {
  print("数字は10以上です。")
} while ($num >= 10);
?>

「数字は10以上です。」と表示されたかと思います。これはdo{}内の繰り返し処理を先に1度実行してからwhile()内の条件式の判定を行なっていためです。pirnt関数が実行されたあと、$num >= 10の条件でfalseが返却されているため、そこで処理が止まります。よって、do{}while()文では、少なくとも1回は繰り返し処理が行われます。

まとめ

いかがでしたでしょうか。今回はPHPでの繰り返し処理をご紹介いたしました。
次回はPHPにおける関数を紹介していきます。

最後に

プログラミングを独学で行うと挫折することがしばしばあります。プログラミングを学んでみたい方、短期間でプログラミングを身につけたい方は64時間で”なりたい”を叶えるプログラミングスクール「WISH」にお気軽にお問い合わせください。現在無料カウンセリングや、入会金無料キャンペーン、さらに受講料20%オフのキャンペーンを開催しております。

非エンジニアでも知らないとヤバイPHP Part8〜条件分岐について理解しよう〜

前回はPHPの配列について説明いたしました。今回はPHPの条件分岐(if文)について説明いたします。

条件分岐とは

条件分岐とは「ある条件が満たされる(論理値でtrueだった)かどうかによって、次に実行する処理を変化させる」ことです。PHPで記述する場合はif文という記法を用います。基本的な書き方は次の様になります。

<?php
if(条件){
  条件が当てはまる場合の処理
}
?>

次から詳しくみていきましょう。

条件分岐の作成方法

具体例をみていきましょう。新しいphpファイルを用意して

<?php
$a = 1;
if($a == 1){
  print('aは1です。');
}
?>

と入力してみてください。入力終了後ブラウザに表示(ブラウザの表示方法はこちら)させた場合「aは1です。」と表示されるはずです。これは$a == 1の条件式が正しい(true)ため、print関数が実行されております。ここで記入しているイコール2つ(==)ですが、論理型(true、false)を返す演算子となります。
では次に

<?php
$a = 1;
if($a == 2){
  print('aは2です。');
}
?>

と入力してブラウザに再度反映させてみてください。恐らく今度は表示されないと思います。これは変数aに1が代入されている状態で、$a == 2の条件式が正しくない(false)ため、print関数が実行されなかったことになります。

if文の条件に関して(true/false)

さて、ここでif文での「条件」について説明します。この条件ですが、判定は論理型(Boolean)で実行いたします(Booleanの説明はこちら)。条件を実行した結果がtrue(正しい)の場合{ }(カーリーブラケット)の中が実行されます。条件の実行結果がfalse(正しくない)の場合、{ }の中の処理は実行されません。試しに次を実行してみてください。

<?php
$a = true;
if($a){
  print('trueです。');
}
?>

「trueです。」とブラウザに表示されると思います。次は

<?php
$a = false;
if($a){
  print('falseです。');
}
?>

こちらはいかがでしょう。今度は表示されないかと思います。変数aにfalseが代入されているため、if文で記載している( )内の条件はfalseとなります。
では、次はどうでしょう?

<?php
$a = false;
if($a == false){
  print('falseです。');
}
?>

今度は「falseです。」と表示されるかと思います。これは、変数aにfalseが格納されていますが、if文内の条件である$a == falseは正しい(true)ですね。従って、条件式内がtrueのため、{ }内のprint関数が実行されます。
では次はどうでしょうか。

<?php
if(0){
  print('条件式の中は0です。');
}
?>

こちらは…実は表示されません。これは論理型(こちら)で説明しましたが、「0(integer)」は論理値ではfalseが返却されます。従って、条件もfalseが格納され、print関数が実行されなくなります。

他にも””(空の文字列)などの論理型で説明したfalseに該当する論理型が条件式に入っている場合、if文の{ }内の処理は実行されません。

条件式がfalseでの処理(! ビックリマーク・エクスクラメーションマーク)

先ほどは条件式がtrueの時の説明をいたしました。では、条件式がfalse(true「以外」)の場合でも処理をしたい場合はどのようにすればよいのでしょうか。この場合、条件式の先頭に「!(ビックリマーク・エクスクラメーションマーク)」を入力すれば処理が実行されます(半角文字で入力してください)。
PHPでの「!」は、論理演算子の「否定」を表します。具体例を見てみましょう。

<?php
$score = 1;
if(!($score == 100)){
  print("変数scoreは100ではありません");
}
?>

この場合、if文の処理は実行されます。$scoreに1が代入されているため$score == 100はfalseですが、!($score == 100)とすることで($score == 100)のfalseを「!」で否定しています。つまり!($score == 100)と記載することでここはtrueになり、if文の中のprint関数が実行されます。

条件がtrue/falseでの処理(else)

これまでは「ある条件が満たされる場合(true)」だけの処理を「!」も含めて説明いたしました。では「ある条件が満たされた場合と満たされなかった場合の処理」の2パターンの分岐をする処理はどうすればよいのでしょうか。その場合「else」を用います。基本的な書き方は次の通りです。

<?php
if(条件){
  条件が満たされた場合の処理
} else {
  条件が満たされなかった場合の処理
}
?>

上記の通り、条件が満たされた場合の処理の後ろに else { 条件が満たされなかった場合の処理 }を追加すればOKです。具体例を見ていきましょう。

<?php
$score = 70;
if($score >= 75){
  print('scoreは75以上です');
} else {
  print('scoreは75未満です');
}
?>

この場合はelse後の処理が実行されます。$scoreに70が代入されており、$score >= 75はfalseとなります。ちなみに$scoreに75以上の数値(integer)を代入すれば条件式がtrueとなり、print(‘scoreは75以上です’)が実行されます。

3つ以上の条件分岐(else if(){}else{})

さて、これまでは「条件が満たされた場合の処理の実行」「条件が満たされた場合、または満たされなかった場合」のif文をご紹介してきました。
次は「条件が3つ以上あった場合(複数条件)の条件分岐」をご紹介いたします。この場合、else if(){}else{}を用います。基本的な書き方は以下の通りです。

<?php
if(条件1){
  条件1が満たされる場合の処理;
} else if(条件2){
  条件2が満たされる場合の処理;
} else {
  条件1も条件2も満たされなかった場合の処理;
}
?>

今回は3つの条件でご紹介しましたが、else if(){}else if(){}…と繋げることで、条件をいくつでも追加していくことが可能です。では具体例を見ていきましょう。

<?php
$score = 55;
if($score >= 80){
  print('優');
} else if($score >= 70){
  print('良');
} else if($score >= 60){
  print('可');
} else {
  print('不可');
}
?>

この場合「不可」が表示されます。今回の条件は

  • 「$scoreが80以上の場合は’優’を出力」
  • 「$scoreが70以上の場合は’良’を出力」
  • 「$scoreが60以上の場合は’可’を出力」
  • 「$scoreが上記以外の場合は’不可’を出力」

の処理が「上から順番に実行」されています(プログラミングの順次処理)。今回$scoreには55が代入されているため、$score >= 80(false)、$score >= 70(false)、$score >= 60(false)が確認された後、どの条件も満たされなかった結果、最後のelse{ }内のprint関数が実行され「不可」が表示されます。上記の場合、$scoreに80以上が代入されていれば「優」が表示されます。

条件分岐と順次処理(else if(){} else {})

では、次はいかがでしょうか。

<?php
$score = 95;
if($score >= 60){
  print('可');
} else if($score >= 70){
  print('良');
} else if($score >= 80){
  print('優');
} else {
  print('不可');
}
?>


$scoreは80以上ですが「可」が表示されます。

今回期待する挙動としては「優」の表示です。この原因は、先ほど記載したプログラミングの順次処理と関係があります。今回のif文は最初の条件に$score >= 60が表示されています。

「$score = 95は$score >=60」なので最初の処理が実行されます。if文は、条件が当てはまった段階でif文の処理が実行され「後の処理は実行されません」。従って今回の条件分岐では「可」が表示されることになります(せっかく高いscoreなのに…)。


このことから、if文を含むプログラミングの処理は「順番」を考慮する必要があることがわかります。考え方としては、条件の厳しいものから順番に処理を実行し、最後に最も条件が甘い条件を実行する様なコードを書くと、期待する挙動が返ってくることになります。

複数条件(if文の入れ子・ネスト)

さて、これまでは複数の条件分岐について説明してきました。ここでは複数の条件について説明します。例えば「東京都にお住まいの、20歳以上のお客様限定の商品」があったとします。この場合「東京にお住まい」と「20歳以上」の両方(複数)の条件を満たす必要があります。この様に複数の条件がある場合、入れ子(ネスト)を用いることで表現が可能です。入れ子の書き方は、次の様になります。

<?php
if(条件1){
  if(条件2){
    条件1がtrueかつ、条件2もtrueの時の処理
  }
}
?>

if文の中にif文が入っていますね。この様に「ある構造の内部に同じ構造が含まれている状態」のことを入れ子(ネスト)と表現します。


条件1がtrueの時に最初の{ }の中の処理に移ります。{ }の中にif(条件2){ }があるので、今度は条件2の論理値が確認されます。条件2がtrueだった場合、if(条件2){ }の中の処理が実行されます。このように書くことで、複数条件のif文を書くことが可能です。
さて、以上を踏まえて例え話に戻ります。先程の条件に当てはまる人をあらかじめ用意する必要があるので、該当する$member変数も配列で用意いたします(配列に関してはこちらを参照)。

<?php
$member = array(
  'name' => '太郎',
  'gender' => '男性',
  'age' => 20,
  'address' => '東京都',
);
if($member['address'] == '東京都'){
  if($member['age'] >= 20){
    print('限定商品の購入が可能です!');
  }
}
?>

この様に書くことで、「東京にお住まい」と「20歳以上」の両方(複数)の条件を設定し、論理値を確認することが可能になります。上記は両方の条件を満たすため、「限定商品の購入が可能です!」と表示されます。


入れ子構造はいくらでも中に記入することが可能です。より厳しい条件を作ることも可能ですが、あまり入れ子が多くなる(ネストが深くなる)とコードが読みづらくなるため、書き方には注意が必要です。

複数条件(かつ(&&)、または(||))

if文の入れ子構造を用いて複数条件の説明をしましたが、他の書き方を行うことで同様の表現が可能です。ここでは&&と||についてご紹介いたします。

複数条件の設定方法

  • &&:かつ(and条件)
  • ||:または(or条件)

&&は、「◯かつ△」に該当します。厳密に言うと「&&の左側の論理値が「true」だった時に、右側の論理値を確認し、右側の論理値を返却する。左側が「false」の場合、falseを返却する。」となります。つまり、&&の左側の論理値がfalseだった場合、その時点でfalseが返却されるので、右側の論理値は確認されません。


||は、「○または△」に該当します。こちらも厳密に言うと「||の左側の論理値が「false」だった時に、右側の論理値を確認し、右側の論理値を返却する。左側の論理値が「true」の場合、trueを返却する。」となります。つまり、||の左側がtrueだった場合、その時点でtrueが返却されるため、右側の論理値は確認されません。

&&:かつ(and条件)

では実際に&&を書いてみましょう。先程の

<?php
$member = array(
  'name' => '太郎',
  'gender' => '男性',
  'age' => 20,
  'address' => '東京都',
);
if($member['address'] == '東京都' && $member['age'] >= 20){
  print('限定商品の購入が可能です!');
}
?>

こう書くと「限定商品の購入が可能です!」が表示されます。ここでは&&の左側の$member[‘address’] == ‘東京都’の論理値を判断した後、&&の右側の$member[‘age’] >= 20の論理値を確認します。両方trueのため、($member[‘address’] == ‘東京都’ && $member[‘age’] >= 20)はtrueが返却されるため、print関数が実行されます。

||:または(or条件)

では次に「65歳以上、または6歳以下の方は乗車賃免除」の乗り物があったとします。この条件をPHPで記述すると、例えば次の様に表現できます。

<?php
$member = array(
  'name' => '幼稚園児',
  'gender' => '女性',
  'age' => 5,
);
if($member['age'] >= 65 || $member['age'] <= 6 ){
  print('該当の年齢の方は、乗車賃が無料です。');
}
?>

この場合「該当の年齢の方は、乗車賃が無料です。」が表示されます。ここでは最初に$member[‘age’] >= 65の論理値が判断されます。||の左側がfalseのため、続いて||の右側の$member[‘age’] <= 6の論理値が判断されます。||の右側がtrueのため、if文の中のprint関数が実行されます。

if文を1行で書く(三項演算子 ?と:)

ここまでif文のご紹介をいたしましたが、実は条件分岐処理はif文以外の記載方法もあります。三項演算子と呼ばれる書き方を用いると表現が可能です。基本的な書き方は以下の通りです。

<?php
  条件 ? 条件がtrueの時の処理 : 条件がfalseの時の処理 ;
?>

条件を書き終えたら「?(半角クエスチョン)」で区切り、?の後に条件がtrueの処理を書きます。その次に「:(半角コロン)」で区切り、:の後に条件がfalseの時の処理を書きます。具体例を見ていきましょう。

<?php
$score = 62;
$score > 60 ? print('試験に合格しました') : print('残念ながら不合格です') ;
?>

この場合、「試験に合格しました」が表示されます。条件がtrueなので、? から : までの処理が実行されます。


この三項演算子、コード量が少なくなるメリットがありますが、書き方によってはコードが理解しづらくなるデメリットもあります。あとから自分が見直した時や、他の人が見てもわかりやすいコードを心がけて、適切にコードを書きましょう。

まとめ

いかがでしたでしょうか。今回はPHPの条件分岐について紹介いたしました。具体的には以下の9つをご紹介いたしました。

  1. 条件分岐
  2. 条件分岐の作成方法
  3. if文の条件に関して(true/false)
  4. 条件式がfalseでの処理(! ビックリマーク・エクスクラメーションマーク)
  5. 条件がtrue/falseでの処理(else)
  6. 3つ以上の条件分岐(else if(){}else{})
  7. 複数条件(if文の入れ子・ネスト)
  8. 複数条件(かつ(&&)、または(||))
  9. if文を1行で書く(三項演算子 ?と:)

今回もかなり盛りだくさんでしたね。プログラミングは1回で覚えようとせず、繰り返し使用しながら馴染ませていってください。

この条件分岐もあらゆるところで使用することが可能です。例えば「会員制のアプリケーションを起動した時に、会員登録が終わっていない方は登録ページに飛ばす」と言ったようなプログラミングにも、今回の条件分岐が扱われております。

次回は繰り返しについて説明します。こちらも今回の条件分岐と同じく、開発に必須で非常に重要な回となりますので、ぜひご覧ください。

最後に

プログラミングを独学で行うと挫折することがしばしばあります。プログラミングを学んでみたい方、短期間でプログラミングを身につけたい方は64時間で”なりたい”を叶えるプログラミングスクール「WISH」にお気軽にお問い合わせください。現在無料カウンセリングや、入会金無料キャンペーン、さらに受講料20%オフのキャンペーンを開催しております。

非エンジニアでも知らないとヤバイPHP Part7〜配列について理解しよう〜

前回はPHPのプログラムのデータ型について大まかに説明いたしました。今回はデータ型の中の「配列」に特化して説明いたします。

配列型とは

配列型とは複数の値をまとめて格納できる型となります。配列は英語で「array」という単語になります。PHPの配列を使う場合、このarrayという文字が頻繁に出てきます。

配列の作成方法

PHPの場合、配列の作成方法は大きく以下の3つがあります。

  1. array()を用いる
  2. 短縮構文[]を用いる
  3. $変数名[] = ‘値’;を用いる

それぞれ説明していきます。

array()

配列の最も基本的な書き方となります。PHPに組み込まれているarray()を使います。array()の括弧の中に値を格納していきます。複数の値を格納する場合「,(カンマ)」を用いて値を区切ります。作成した配列は、代入演算子を用いて変数や定数に代入していきます。

$values = array(
'値1',
'値2',
'値3',
);
print_r($values); //print_r()で配列の値の呼び出し
// Array(
// [0] => 値1
// [1] => 値2
// [2] => 値3
// )

作成した配列は、中の要素(上記の値1、値2、値3)を取り出すことも可能です。特に指定した名称(キー)をつけない場合、配列の要素(中身)に関しては0からカウントします。取り出し方法の詳細に関しては「配列のキー」で説明いたします。例えば「値2」を取り出したい場合、以下の様に記述します。

print_r($values[1]); // 値2

短縮構文[]

次に短縮構文の[]について説明します。と言っても、こちらは先に紹介したarray()を[]で書き換えた形になります。具体的な書き方は下記の通りです。

$values = ['値1' , '値2' , '値3' ,];
print_r($values);
// Array(
// [0] => 値1
// [1] => 値2
// [2] => 値3
// )
print_r($values[2]); // 値3

$変数名[] = ‘値’; を用いる

最後に$変数名[]について説明いたします。こちらは変数名の後ろに[]をつけることで、変数に対し後ろから値を格納していくことができます。

$fruits[] = 'apple';
$fruits[] = 'banana';
$fruits[] = 'orange';
print_r($fruits);
// Array(
// [0] => apple
// [1] => banana
// [2] => orange
// )
print_r($fruits[0]); // apple

配列のキー(key)

配列のキーは、配列の添字(インデックス)や連想配列のキー(後述)を指します。キーには整数と文字列を使用することができます。配列にキーを指定した場合は、そのキーを用いることでキーに対応する要素を選択することができます。書き方としては、$変数名[キー(要素番号・要素名)]と言った書き方となります。
今回はキーに[‘name’] [‘gender’] [‘age’] [‘address’]を設定してみます。

$member['name'] = '太郎';
$member['gender'] = '男性';
$member['age'] = '20';
$member['address'] = '東京都';
print_r($member);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )

配列の中の特定の値を取り出したい場合、配列名(変数)の後ろに[](角括弧・ブラケット)をつけ、その中身にキーを入力します。例えば今回、太郎さんのage(年齢)である「20」を取り出したかった場合、$member[‘age’]とすることで、「20」にアクセスできます。

print_r($member['name']); // 太郎
print_r($member['gender']); // 男性
print_r($member['age']); // 20
print_r($member['address']); // 東京都

キーは省略することも可能です。省略した場合、整数のキーが自動で付与されます。付与されるキーは、既にキーが存在する場合は、キーに付与されている数字の次の数字があてがわれます。キーが存在しない場合、[0]からキーが付与されます。
ちなみにこのキーは、既に使用されているキーを再度使用すると、既に使用されているキーの値が変更されてしまうため、注意が必要です。逆に意図的に変更したい場合(例えばユーザーから入力された情報をもとにデータを上書きする場合など)は、配列のキーを指定して値を代入していく手段が使われます。

$member['name'] = '太郎';
$member['gender'] = '男性';
$member['age'] = '20';
$member['address'] = '東京都';
$member['name'] = '次郎'; //←キー['name']に'次郎'を代入(太郎を上書き)
$member[] = '大学生';
$member[] = '経済学部';
$member[1] = '商学部'; //←キー[1]に'商学部'を代入(経済学部を上書き)
print_r($member);
// Array(
// [name] => 次郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// [0] => 大学生
// [1] => 商学部
// )

配列の初期化

配列の初期化方法ですが、方法としては下記の2つがあります。

  1. $変数名 = array();
  2. $変数名 = [];

変数名に空の配列を代入しています。

$Array1 = array(); //1.の空配列を作成
$Array2 = []; //2.の空配列を作成
print_r($Array1);
// Array( ) //1.の出力結果
print_r($Array2);
// Array( ) //2.の出力結果

連想配列とは

連想配列はキーで配列の要素を指定できる配列のことを連想配列と呼びます。「 キー => 値 」という記法を用いて必要な数を ,(カンマ)で区切り、引数として渡します。先程の太郎さんの例を使うと以下のような書き方になります。

①array()を用いた場合

$taro = array(
'name' => '太郎',
'gender' => '男性',
'age' => 20,
'address' => '東京都',
);
print_r($taro);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )
echo $taro[name]; //太郎

②短縮構文[]を用いた場合

$taro = [
'name' => '太郎' ,
'gender' => '男' ,
'age' => 20 ,
'address' => '東京都' ,
];
print_r($taro);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// );
echo $taro['gender']; //男性

③$変数名[‘キー’] = ‘値’;を用いた場合

$taro['name'] = '太郎';
$taro['gender'] = '男性';
$taro['age'] = 20;
$taro['address'] = '東京都';
print_r($taro);
// Array(
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )
echo $taro['address']; //東京都

多次元配列とは

多次元配列は配列の中に、さらに配列が入っている状態の配列のことを多次元配列と呼びます。複数の情報を、複数にまたがって保有したい場合などに用います。実際の使い方を、短縮型とarray()型(及びキー)を例に説明いたします。

$members = [
['花子' , "女性" , 22 ],
['太郎' , "男性" , 20 ],
['幸子' , "女性" , 24],
];
echo $members[0][0] . 'さんは' . $members[0][1] . 'で' . $members[0][2] . '歳です。';
// 花子さんは女性で22歳です。
echo $members[1][0] . 'さんは' . $members[1][1] . 'で' . $members[1][2] . '歳です。';
// 太郎さんは男性で28歳です。
echo $members[2][0] . 'さんは' . $members[2][1] . 'で' . $members[2][2] . '歳です。';
// 幸子さん女性で24歳です。

$members2 = array(
array(
'name' => 'ポチ',
'gender' => 'オス',
'age' => '5',
),
array(
'name' => 'タマ',
'gender' => 'メス',
'age' => '3',
),
);
echo $members2[0]['name'] . 'は' . $members2[0]['gender'] . 'で' . $members2[0]['age'] . '歳です。';
//ポチはオスで5歳です。
echo $members2[1]['name'] . 'は' . $members2[1]['gender'] . 'で' . $members2[1]['age'] . '歳です。';
//タマはメスで3歳です。

配列の操作

配列の操作に関してもいくつか方法があります。具体的には下記の通りです。

  1. 1 配列の要素の追加
  2. 2 配列の要素の削除
  3. 3 配列の要素の変更
  4. 4 配列同士の結合

配列の要素の追加

配列に要素を追加する場合、大きく5つの方法があります。

  1. 1 array_push()の使用
  2. 2 []の使用
  3. 3 array_merge() の使用
  4. 4 array_unshift()の使用
  5. 5 +演算子の使用

array_push()の使用

array_push関数は1つ以上の要素を、配列の最後に追加する関数です。arrya_push関数は、関数に使用した元の配列を変更します(元の配列に追加されます)。1つだけ要素を追加することも可能ですが、1つだけ追加する場合は次に説明する[]を使用した方が関数を呼び出す負荷(オーバーヘッド)が減ります。

$fruits = ['りんご' , 'バナナ' , 'みかん' ,];
array_push($fruits , 'ぶどう' , 'もも');
print_r($fruits);
// Array(
// [0] => りんご
// [1] => バナナ
// [2] => みかん
// [3] => ぶどう
// [4] => もも
// )//元配列の$fruitsに’ぶどう’と’もも’が追加された
$sports = ['野球' , 'サッカー' , 'バレーボール' ,];
array_push($sports , ['陸上' , '水泳' ,] , ['フィギュアスケート' , 'スピードスケート' ,]);
print_r($sports);
// Array(
// [0] => 野球
// [1] => サッカー
// [2] => バレーボール
// [3] => Array(
// [0] => 陸上
// [1] => 水泳
// )
// [4] => Array(
// [0] => フィギュアスケート
// [1] => スピードスケート
// )
// )//元配列の$sportsの[3]と[4]に[‘陸上’ , ‘水泳’]と[‘フィギュアスケート’ , ‘スピードスケート’]が追加されました。

[]の使用

[]の使用は、$変数名[] = ‘値’;のところで説明した内容と重複します。変数に対し、後ろから値を格納していきます。

array_merge()の使用

array_merge関数は、merge元の配列と結合する配列を指定することで、配列同士を結合します。array_merge関数は、元の配列を変更しません。

$fruits1 = [‘りんご’ , ‘ばなな’ , ‘みかん’];
$fruits2 = array_merge($fruits1 , [‘ぶどう’ , ‘もも’]);
$print_r($fruits1);
$print_r($fruits2);
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// ) 元の配列は変更しない
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// [3] => ぶどう
// [4] => もも
// ) //’ぶどう’と’もも’が追加された

array_unshift()の使用

array_unshift関数は、1つ以上の要素を配列の先頭に加えます。array_unshift関数は、関数に使用した元の配列を変更します(元の配列に追加されます)。

$fruits1 = [‘りんご’,’ばなな’,’みかん’];
array_unshift($fruits1 , ‘ぶどう’ , ‘もも’);
print_r($fruits1);
// Array (
// [0] => ぶどう
// [1] => もも
// [2] => りんご
// [3] => ばなな
// [4] => みかん
// ) //元の配列$fruits1の先頭に’ぶどう’と’もも’が追加された

+演算子の使用

+演算子に関しては、連想配列で使用可能です。キーと値を指定している場合、+演算子を用いて配列に値を追加していくことが可能です。+演算子では、元の配列を変更しません。

$array1 = [‘りんご’,’ばなな’,’みかん’];
$array2 = $array1 + [3 => ‘ぶどう’];
$array3 = $array1 + [‘もも’];
print_r($array1);
print_r($array2);
print_r($array3);
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// ) //元の配列は変更されない
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// [3] => ぶどう
// ) //ぶどうが追加された
// Array (
// [0] => りんご
// [1] => ばなな
// [2] => みかん
// ) //キーを指定していない’もも’は追加されない

配列の要素の削除

配列から要素を削除する方法は、大きく4つの方法があります。

  1. unset()の使用
  2. array_splice()の使用
  3. array_shift()の使用
  4. array_pop()の使用

unset()の使用

unset関数は、配列の要素を削除します。キーを指定しない場合、要素の全てを削除します。また、要素のキーを指定して削除した場合、そのキーは歯抜けの状態となります。unset()関数は元の配列を変更します。

$array1 = ['りんご','ばなな','みかん'];
unset($array1);
print_r($array1);
// NULL
$array1 = ['りんご','ばなな','みかん'];
unset($array1[1]);
print_r($array1);
// Array (
// [0] => りんご
// [2] => みかん
// ) //[1] => ばなな が削除され、歯抜けの状態になった([2] => みかん は [1] => みかん に変更されない)

余談ですが、arrayを連番にしたい場合、array_values関数を用います。

$array1 = ['りんご','ばなな','みかん'];
unset($array1[1]);
$array1 = array_values($array1);
print_r($array1);
// Array (
// [0] => りんご
// [1] => みかん
// )

array_splice()の使用

array_splice関数は、指定した位置から配列の要素を削除します。array_splice関数は、元の配列を書き換えます。オプションを追加することで、削除する配列の要素数・削除した後に置換する要素を指定することもできます。書き方としては下記の通りとなります。
array_splice( 配列 , 配列の要素の削除開始位置 , [ , 削除する配列の要素数 [ , 置き換える要素 ] ]);

$array1 = ['りんご','ばなな','みかん'];
array_splice($array1 , 1);
print_r($array1);
// Array ( [0] => りんご ) // ‘ばなな’と’みかん’が元の配列から削除された

$array1 = ['りんご','ばなな','みかん'];
array_splice($array1 , 1 , 1);
// Array (
// [0] => りんご
// [1] => みかん
// ) //配列の1番目(削除開始位置)から1つの要素(ばなな)を削除

$array1 = ['りんご','ばなな','みかん'];
array_splice($array1 , 1 , 1 , ['ぶどう' , 'もも']);
print_r($array1);
// Array (
// [0] => りんご
// [1] => ぶどう
// [2] => もも
// [3] => みかん
// ) //配列の1番目(削除開始位置)から1つの要素(ばなな)を削除し、削除した箇所を’ぶどう’と’もも’で置換しました。

array_shift()の使用

array_shift関数は、配列の先頭の要素を削除する関数です。array_shift関数は、元の配列を変更します。array_shift(配列);で使うことができます。

$array1 = ['りんご','ばなな','みかん'];
array_shift($array1);
print_r($array1);
//Array (
// [0] => ばなな
// [1] => みかん ) // 配列の先頭の’りんご’が元の配列から削除された

array_pop()の使用

array_pop関数は、配列の最後尾の要素を削除する関数です。
array_pop関数は、元の配列を変更します。array_pop(配列);で使うとこが可能です。

$array1 = ['りんご','ばなな','みかん'];
array_pop($array1);
print_r($array1);
// Array (
// [0] => りんご
// [1] => ばなな
// ) //配列の最後尾の’みかん’が配列から削除された

配列の要素の変更

配列の要素を変更する方法は、大きく2つ方法があります。

  1. 1 要素のキーを指定して再代入する
  2. 2 allay_replace()の使用

要素のキーを指定して再代入する

今までの説明でも出てきましたが、連想配列を用いて既出の要素のキーを指定して変数を格納することで、配列の要素を変更できます。

$member['name'] = '太郎';
$member['gender'] = '男性';
$member['age'] = 20;
$member['address'] = '東京都';
print_r($member);
// Array (
// [name] => 太郎
// [gender] => 男性
// [age] => 20
// [address] => 東京都
// )
$member['age'] = 30; //ageに30を再代入
$member['address'] = '新宿区'; //addressに’新宿区’を再代入
print_r($member);
// Array (
// [name] => 太郎
// [gender] => 男性
// [age] => 30
// [address] => 新宿区
// ) //ageとaddressが変更された

array_replace()の使用

array_replace関数は、渡された配列の要素を置き換えます。array_replace関数は元の配列を書き換えません。書き方は以下の通りとなります。
array_replace(配列 , 置き換えたい要素を含む配列);

$member1 = [
'name' => '太郎',
'gender' => '男性',
'age' => 20,
'address' => '東京都',
];
$replace1 = [
'address' => '千葉県',
'age' => 25,
];
$replace2 = [
'name' => '次郎',
'address' => '神奈川県',
];
$member2 = array_replace($member1 , $replace1, $replace2);
print_r($member1);
print_r($member2);

// Array ( [name] => 太郎 [gender] => 男性 [age] => 20 [address] => 東京都 )
// Array ( [name] => 次郎 [gender] => 男性 [age] => 25 [address] => 神奈川県 )

配列同士の結合

  1. 1 array_merge()の使用
  2. 2 array_push()の使用
  3. 3 +演算子の使用

いずれも配列の要素の追加で説明した内容と同じです。

まとめ

いかがでしたでしょうか。今回はPHPの配列について紹介いたしました。具体的には以下の7つをご紹介いたしました。

  1. PHPの配列型とは
  2. 配列の作成方法
  3. 配列のキー
  4. 配列の初期化
  5. 連想配列
  6. 多次元配列
  7. 配列の操作(追加・削除・変更・結合)

今回の内容はかなり多数に渡りました。正直1回で理解することは難しいかもしれません。ただ、配列を理解するとプログラミングで実行できる範囲がかなり広がります。今回ご覧いただいた内容は、ぜひ理解して今後のプログラミングに活用してください。次回は条件分岐について説明します。非常に重要な回となりますので、ぜひご覧ください。

最後に

プログラミングを独学で行うと挫折することがしばしばあります。プログラミングを学んでみたい方、短期間でプログラミングを身につけたい方は64時間で”なりたい”を叶えるプログラミングスクール「WISH」にお気軽にお問い合わせください。現在無料カウンセリングや、入会金無料キャンペーン、さらに受講料20%オフのキャンペーンを開催しております。

非エンジニアでも知らないとヤバイPHP Part6〜データ型を理解しよう〜

前回は自分で書いたPHPのプログラムをブラウザに表示させるところまで実行しました。今回は、プログラミングのデータ型について説明していきます。

「データ型」とは何か

それではさっそく「データ型」について紹介していきます。
プログラミングにおける「データ型」とは、扱うデータをいくつかの種類に分類して、各々について「名称」「特性」「範囲」「扱い方」「表記方法」「メモリ上での記録方法」などの、規約を定めたものです。扱うデータを分類することで、分類したデータを適切に管理したり、希望するデータを探しやすくなるメリットがあります。
例えば「電話番号の入力欄」に文字や小数点が入っていたら、適切な管理ができなくなるかと思います。11桁(+81から始まる場合はもう2桁増えます)の整数が入っている必要がありますね。この様な条件を指定するためにも、データ型は役に立ちます。
主なデータ型として、今回は以下の7つをご紹介いたします。

  • 整数型(integer)
  • 浮動小数点数型(float)
  • 文字列型(string)
  • 論理型(bool、boolean)
  • 配列型(array)
  • オブジェクト型(object)
  • NULL型(null)

整数型(integer)とは

一番なじみやすいデータ型として、最初に整数型(integer)を紹介します。
整数型は「…、-4、-3、-2、-1、0、1、2、3、4、…」と「正の整数」「負の整数」「0」が該当します。
余談ですが、このinteger(整数)という単語…筆者は「高校数学で学習した積分のインテグラル(∮:integral)と発音が似てるな…」と感じていました。
調べてみたところ、いずれも語源は同じ様でして、ラテン語の integr-(完全な)から来ている様です。

浮動小数点数型(float)とは

「少数点以下の数を含む数」がこちらに該当します。
具体的には「1.3、20.67」などの小数点を含む数字が該当します。
ちなみに、PHPでは少数の取り扱いがあまり得意ではありません。というのも、少数に用意されている桁数に限りがあるためです。
例えば「0.333333…」の様な無限小数は管理しきれません。また、小数同士の計算を重ねていくと細かい誤差が出てきます。
桁数が決まっている少数の計算の場合、先に整数(例えば1,000倍にするなど)に変換して計算を行なってから、実際の小数に計算しなおす(計算の最後に1/1,000にする)などの工夫が必要です。

文字列型(string)とは

「文字、または文字が連結されたもの」をさします。文字列型を使う場合「'(シングルクォート)」または「"(ダブルクォート)」で囲います。
以前Part4でご紹介した、"山田太郎" "山田花子"などが文字列にあたります。ちなみに、整数型や不動小数点数型も「'」や「"」で囲うと文字列型になります。

論理型(bool、boolean)とは

型としては最も選択肢の少ない簡単な型ともいえます。論理型は真偽の値を表します。つまり「true(真)」または「false(偽)」のどちらかになります。
この論理型はプログラミングにおいて重要な「条件分岐」においてよく使われます。「ある条件が当てはまるときはA、そうでない場合はB」と言ったものですね。
代表的なものでif文があります。「もし〜なら○○」というやつですね(この様な文章は普段の会話ではあまり使わないかもしれませんが…)。
例えば「(今日は)疲れたから、帰りの交通手段にタクシーを使おう」も条件分岐に当てはまります。
疲れた = true(疲れている) → タクシーを使う
疲れた = false(疲れていない)→タクシーを使わない(歩いて帰るなど)
の様な感じですね。
この論理演算子ですが、true・falseとファイル内にベタ打ちしても判定されますが、条件が合致しているか否かでも判定されます。
詳細は別の機会に紹介しますが、以下に例をご案内いたします。

$haveMoney = 160;
if($haveMoney >= 140){
 echo "ペットボトルの飲み物が買えます!";
}

この場合、$haveMoneyに160が代入されています。$haveMoney >= 140はtrue(160>=140なので正しい)です。したがって、if($haveMoney >= 140)の部分はif(true)と同じ意味になります。
上記のif文は()内の条件がtrueの時に{}内の処理を実行しますので、”ペットボトルの飲み物が買えます!”が呼び出されます。
boolに変換する場合、trueとfalseは以下の条件となります。

【false(条件が少ないのでこちらから記載します)】

  • booleanのfalse
  • 数値(integer)の0
  • 浮動小数点数(float)の0.0、-0.0
  • 文字列(string)の”0″
  • 文字列(string)の空文字列の””
  • 配列型の要素の数が0のもの
    (配列型は後述しますが、複数の値をまとめて格納できます)
  • NULL
    (NULLは後述しますが、変数が値を持たない状態です)
  • 属性がない空要素から作成されたSimpleXMLオブジェクト
    (こちら詳細は今回割愛いたします)

【true】

  • 上記以外の全て(負の数字、NAN(Not a Number)も含みます)

配列型(array)とは

配列型は複数の値をまとめて格納できる型となります。配列はarray()[](ブラケット:角括弧)で表現されます。
基本的に変数を宣言した場合、格納される値は1つになります。一方配列型の場合、複数の値をまとめて1つの値として格納が可能となります。
具体的には下記の通りになります。

//①変数の基本形(リテラル型)
$member1 = "値1";
$member2 = "値2";
$member3 = "値3";

//②変数の配列型
$members = array("値1" , "値2" , "値3");
//$members = array(
// 0 => "値1" , //キーを0に指定
// 1 => "値2" , //キーを1に指定
// 2 => "値3" , //キーを2に指定
//);も同じ。
//$members = ["値1" , "値2" , "値3"];も同じ。[]で囲った場合、短縮公文になります。

//③配列型で作成した値の呼び出し
echo $members[0] // "値1"と表示される。
echo $members[1] // "値2"と表示される。
echo $members[2] // "値3"と表示される。

上記の通り、通常変数を定義する場合、変数の数だけ変数を宣言する必要があります①。一方、配列型を用いると、複数の値を1つの変数に格納できます②。そして配列型で作成した値を呼び出すには、配列のどこに格納されているかを指定する必要があります③。
ちなみにarray()および[]の中身の順番(index)に関してですが、特にキー(値に紐づいた名前)を指定しなかった場合、indexは0からスタートします。
配列に関しては他にも「連想配列」や「多次元配列」など、実践的な使い方が数多く存在します。今回は初歩的な部分の紹介に留め、詳しいことは次のブログ記事で解説いたします。

オブジェクト型(object)とは

オブジェクト型はデータ構造(プロパティ)と処理系(メソッド:関数)がまとまった型となります。このオブジェクト型を用いることで、機能毎のまとまりができるため、保守性・柔軟性・可読性などが向上します。
このオブジェクト型を理解するには、先に「関数」についても理解する必要があります。関数のご紹介はまた他の記事で実施し、今回はオブジェクトの大枠をざっくりとご紹介をいたします。
オブジェクト型を使用するには、いくつかの手順を踏む必要があります。

  • 最初に「クラス(class)」を定義する
  • 定義したクラス内に、必要なプロパティ(クラス内の変数)とメソッド(クラス内の関数)を定義する
  • 定義したクラスを基に、オブジェクトを生成する(インスタンスの生成)
  • オブジェクトを生成した後に、クラスで定義したプロパティやメソッドを呼び出す

この様な手順となります。具体例は以下の通りとなります。

<?php
//最初にクラスを定義する
class Human{
//プロパティの定義(実際の名前は後で設定するため、一旦値は空です)
public $name;
//メソッドの定義(メソッド内でプロパティを$this->nameを使って呼び出しています)
public function greet()
{
echo "こんにちは。私の名前は『" . $this->name . "』です!";
}
} //ここまでがクラスの定義

//クラスからインスタンスを生成する。
$ yamada = new Human();
//インスタンスの$nameプロパティに名前を設定する。
$ yamada->name = "山田 太郎";
//インスタンスのgreet()メソッドを呼び出す。
$ yamada->greet(); // ==> こんにちは。私の名前は『山田 太郎』です!

今回はHumanクラスを作成し、プロパティ(変数)に$name、メソッド(関数)にgreet()を用意しました。
急に難しくなりましたね…順を追って説明します。


class Human{

ここではclassを定義しています。

public 「アクセス修飾子」と呼ばれるものです。どこからプロパティやメソッドにアクセスできるかを表します。public,protected,privateなどがあります。今回は、外部からアクセスできるpublicを使用しています。外部からアクセスできないようにするにはprotectedやprivateを用います。

$name プロパティ(クラス内の変数)です。必要に応じて後から変更できるよう、初期値は設定せず、変数宣言のみ実行しています。後で出てくる$yamada ->name = “山田 太郎”で、インスタンス化(後述参照)された$nameに値を設定しています。

public function greet(){...}

メソッド(クラス内の関数)です。ここでは「こんにちは。私の名前は『〇〇』です!」とechoされるメソッドを用意しました。

$this->name

擬似変数$thisからnameプロパティにアクセスしています。

.(ドット) 結合演算子です。.(ドット)の左側と右側を結合します。
ここまででクラスの定義が完了しています。

$yamada = new Human();

インスタンスを生成しています。
実はクラスというものは、定義するだけでは使用できません。
今回のように、$yamadaに対しnew演算子を用いてHumanクラスをインスタンス化した様に、インスタンスを生成する必要があります。

$yamada->name = "山田 太郎";

生成したインスタンスのnameプロパティに”山田 太郎”を代入しています。

$yamada->greet();

生成したインスタンスからメソッドを呼び出しています。事前に$yamada->name = "山田 太郎";でnameプロパティに”山田 太郎”を代入したので、メソッドを呼び出した際は$this->name;に”山田 太郎”が代入されます。したがって、メソッドが呼び出された際は
「こんにちは。私の名前は『山田 太郎』です!」
と表示されます。
大まかではありますが、オブジェクト型はデータ構造と処理系がまとまった型であることのご紹介をいたしました。

NULL型(null)とは

NULL型は「変数が値を持たない状態」を表す特殊な型です。具体的には以下の3つの状態が該当します。

  • 定数のNULLが代入されている。
  • 変数に値が代入されていない。
  • 変数がunset()されている。

順を追って説明します。
「定数のNULLが代入されている」とは、変数に定数のNULLを代入している状態です。
次の「変数に値が代入されていない」とは、変数の宣言は行っているものの値が代入されていない状態を指します。
最後の「変数がunset()されている」とは、変数宣言を行い値を代入した後に、変数の割り当てを削除した状態です。各々以下の通りとなります。

<?php
$value1 = NULL; //定数NULLを代入しています
$value2 = ; //変数に値が代入されていません
$value3 = 3; //変数に3を代入しています

echo $value1; //何も出力されません
echo $value2; //何も出力されません
echo $value3; //3

unset($value3); //変数をunset()関数で$value3の変数の割り当てを削除しました

echo $value3; //今度は何も出力されません

この様に、変数が値を持たない状態がNULL型に該当いたします。

まとめ

いかがでしたでしょうか。
今回はPHPでの型について紹介いたしました。
次回はPHPでの配列について、より詳しく紹介していきます。
非エンジニアでも知らないとヤバイ Part7〜配列の紹介〜に移動する。

最後に

プログラミングを独学で行うと挫折することがしばしばあります。プログラミングを学んでみたい方、短期間でプログラミングを身につけたい方は64時間で”なりたい”を叶えるプログラミングスクール「WISH」にお気軽にお問い合わせください。現在無料カウンセリングや、入会金無料キャンペーン、さらに受講料20%オフのキャンペーンを開催しております。


Warning: include(/var/www/html/tetraup.com/knocknote.jp/tmpl/aside.html): failed to open stream: No such file or directory in /var/www/html/tetraup.com/news_topics/wp-content/themes/news/archive.php on line 24

Warning: include(): Failed opening '/var/www/html/tetraup.com/knocknote.jp/tmpl/aside.html' for inclusion (include_path='.:/usr/share/pear7:/usr/share/php') in /var/www/html/tetraup.com/news_topics/wp-content/themes/news/archive.php on line 24