sit in a circle and chat happily

PHP 2日目

投稿日:2022-01-14
更新日:2022-03-24
php

データ型

PHPで使用した値と変数は下記データ型のいずれかに属している。データ型は必要に応じて適したものに自動変更してくれるので普段はあまり意識せずに使用できるが公式マニュアルなどで調べる際に出てくる。

基本型は変数内に直接値が入る。
参照型は配列やオブジェクトのようにアドレス先を参照してそこに値を管理していく。

データ型内容
基本型文字列      string「’」か「”」で囲まれた値
整数型      int整数
浮動小数点数型  float,double浮動小数点数
真偽型      boolean「true」または「false」
参照型配列型      array配列
オブジェクト型  objectオブジェクト
特殊型リソース型    resource外部から取得したリソース
ヌル       null変数が値を持っていない状態

文字列として出力:通常の出力に使用

echo命令

echo 出力する内容;

変数内の値を文字列として出力する場合はecho命令かprint命令を使用する。
変数内の値が文字列型ではない場合、文字列型に変換して出力する

変数の型や値を出力する:デバック時に使用

var_dump関数

var_dump(出力する変数);

変数の型や値を正確に出力する場合に使用する。デバック時に使用し、実際に公開するページの出力処理としては使用しない。

PHPは変数に入る値によって自動的にデータ型が変換されるため変数宣言時にデータ型を指定しない。

文字列型:string

    $val = 'おいしい水';
    echo '<p>';
    var_dump($val);
      //string(15) "おいしい水"
      // データ型とバイト数と値を出力
    echo '<br>';
    echo $val;
      // おいしい水(文字列型のまま出力)
      echo '</p>';

(15)は文字のバイト数。
※UTF-8の全角文字は1文字3バイトもしくは2バイト

整数型:int(integer)

    $val = 100;
    echo '<p>';
    var_dump($val);
      // int(100)
      // データ型と値を出力
    echo '<br>';
    echo $val;
      // 100(文字列型に変換されている)
    echo '</p>';

浮動小数点数型:float

    $val = 200.5;
    echo '<p>';
    var_dump($val);
      // float(200.5)
      // データ型と値を出力
    echo '<br>';
    echo $val;
      // 200.5(文字列型に変換されている)
    echo '</p>';

真偽値型:bool(boolean)

    $val = true;
    echo '<p>';
    var_dump($val);
      // bool(true)
      // データ型と値を出力
    echo '<br>';
    echo $val;
    // 1(数値型に変換「1」→ 文字列型に変換して1を出力)
    echo '</p>';

    $val = false;
    echo '<p>';
    var_dump($val);
      // bool(false)
      // データ型と値を出力
    echo '<br>';
    echo $val;
    // 文字列に変換して「空文字」を出力
    echo '</p>';

文字列連結演算子

演算子名称内容
.(ドット)文字列連結演算子文字列同士を連結する
<?php
  $name = '田中';

  echo '<h2>1回目の出力</h2>';
  echo 'こんにちは' . $name . 'さん';
    // 文字列連結演算子は「.(ドット)」を使う
    // JSは「+」だったので注意!

  echo '<h2>2回目の出力</h2>';
  echo $name . 200;
    // echo $name .200; //エラー
    // 文字列連結演算子の後に数値がくる場合
    // 「.」の後に半角スペースを入れないと
    // 「.」が小数点として扱われるので注意
?>

「.」と数値の間に「半角スペース」を入れないとエラーになる

第3章:配列

配列の使い方

配列とは

複数の値を連番を付けて保存しておくデータの集合体のこと。
通常1つの変数には1つの値しか入れることができないが、配列を使うと1つの変数に複数の値を入れて管理できる。
主に同じカテゴリーやグループに属する複数の値を管理する際に使用される。

JSと違って、データを管理しているだけ

配列管理変数の名前

配列は複数の値を管理するので、できるだけ変数名を複数形にするか「〇〇List」のような名前にする。複数形や「〇〇List」にしておけば、変数名から配列であることを暗に伝えることができる。

配列の作り方

配列リテラルでの配列作成

※こちらの作成方法でOK
 (array()で作成するとの変わりない)

$変数名 =[値,値,・・・];
$fruits = ['いちご', 'みかん', 'りんご'];
    echo '<h2>1回目の出力</h2>';
    echo '<pre>';
    var_dump($fruits);
    echo '</pre>';
      // pre要素は整形済みテキスト表示
      // pre要素を使うと確認がしやすい

array()での配列作成

$変数名 =array(値,値,・・・);
$shikoku = array('高知県', '香川県', '愛媛県', '徳島県');
    echo '<h2>2回目の出力</h2>';
    echo '<pre>';
    var_dump($shikoku);
    echo '</pre>';

ブラケットでの配列作成

$変数名[]=値;
$変数名[部屋番号]=値;

ブラケット内に部屋番号を入れずに配列を作成した場合、部屋番号は自動的に0から順番に付けられる。
ブラケットに数値を指定して配列を作成した場合、指定した部屋番号に値が代入される。

$northKanto[] = '茨城県';
$northKanto[] = '栃木県';
$northKanto[] = '群馬県';
$northKanto[10] = 'テスト1';
$northKanto[] = 'テスト2';
  // 配列の[]に部屋番号を指定しない時は
  // 一番大きな部屋番号の次の数値を自動で割り振る
  // 部屋が存在しないときは「0」を割り振る
  // PHPの配列は連番を保証していない
    echo '<h2>3回目の出力</h2>';
    echo '<pre>';
    var_dump($northKanto);
    echo '</pre>';
$hundred = [100, 100.0, '100','百'];
  // 配列内に異なるデータ型の値を管理できる
  // 今回は「数値型」「小数型」「文字列型」が
  // 混在した配列を作成している
  // ※JSもデータ型管理OK
  //   JavaはNG
    echo '<h2>4回目の出力</h2>';
    echo '<pre>';
    var_dump($hundred);
    echo '</pre>';

配列の確認:デバック用

var_dump関数

var_dump(出力する変変数);

配列内の値を使用(参照)する

変数名[部屋番号]
    echo "<p>{$fruits[1]}</p>";
    echo '<p>' . $fruits[1] . '</p>';

配列内の部屋数を調べる:count関数

count(配列管理変数名)
    // count関数を使うと部屋数を取得できる
    echo count($fruits);
    echo "<p>フルーツを{count($fruits)}個管理</p>";
    echo '<p>フルーツを' . count($fruits) . '個管理</p>'

配列内の値を変更する:代入

変数名[部屋番号]=値;

配列内に新しい部屋を作る

変数名[新たな部屋番号]=値;
変数名[]=値;

新たな部屋番号は基本的に既存の部屋番号から連番で指定する。
部屋番号を指定せずに値を代入すると新たな部屋が作成される。

HTMLタグを出力

  <?php
    $src = 'img/b002.jpg';
    $alt = 'ねこにゃん';
    echo '<p>';
    /*
    <img src="img/b001.jpg" alt="DPH">
    <img src="ココ変える" alt="ココ変える">
    <img src="変数" alt="変数">
    <img src=" . 変数 . " alt=" . 変数 . ">
    '<img src="' . 変数 . '" alt="' . 変数 . '">'
    */
    echo '<img src="' . $src . '" alt="' . $alt . '">';
    echo '</p>';

    $srcList = [
      'img/b001.jpg',
      'img/b002.jpg',
      'img/b003.jpg',
      'img/b004.jpg'
    ];
    $altList = [
      'DPH',
      'ねこにゃん',
      'もんちゃん',
      '部屋'
    ];
    echo '<p>';
    echo '<img src="' . $srcList[2] . '" alt="' . $altList[2] . '">';
    echo '</p>';
ブラウザ出力内容
   // 問題2
    // for文を使って画像を4枚表示する
    // 注意点!
    //  変数は$がつく・部屋数の取得方法がJSと異なる
    echo '<h2>問題2:管理している画像を表示<h2>';
    for( $i =0; $i< count($srcList) ; $i++){
      echo '<p>';
      echo '<img src="' . $srcList[$i] . '" alt="' . $altList[$i] . '">';
      echo '</p>';
    }

乱数を扱う関数

PHPはよく使う処理をあらかじめ用意している。このよく使う処理を「関数」と呼ぶ。ここでは日付を扱うmt_rand関数を学ぶ。

公式サイト「https://www.php.net/」で「mt_rand関数」を調べる。

()内に何も記述しないと0からmt_getrandmax()の間の乱数をint型で返す
  ※mt_getrandmax() →2147483647

$minは生成する乱数の最小値。$maxは生成する乱数の最大値。
例えばmt_rand(5,15)は5以上15以下の乱数をint型で返す。

上記の説明ではint型のパラメータを「,(カンマ)」で区切って2つ記述して呼び出すことを意味している。公式サイトで「パラメータ」や「返り値」の詳細も確認する。
併せて「注意」「変更履歴」「参考」も目を通しておくことで知見が広がる。

参考 

  • mt_srand() – メルセンヌ・ツイスター乱数生成器にシードを指定する
  • mt_getrandmax() – 乱数値の最大値を表示する
  • random_int() – 暗号論的に安全な疑似乱数を生成する
  • random_bytes() – 暗号論的に安全な、疑似ランダムなバイト列を生成する
  • openssl_random_pseudo_bytes() – 疑似ランダムなバイト文字列を生成する
  • rand() – 乱数を生成する

ランダムな整数を生成

mt_rand():int

【問題】くじの作成(乱数の利用)

echo '<h2>問題:おみくじ</h2>';
/*
配列で「大吉」「吉」「小吉」「凶」を管理
乱数を生成してくじを表示
*/
  $kujiList=[
    '大吉',
    '吉',
    '小吉',
    '凶',
  ];
$num= mt_rand(0,count($kujiList)-1);
// echo $num;
echo '<p>' . $kujiList[$num] . '</p>';
echo "<p>{$kujiList[$num]}</p>"

乱数を使えば、画像をランダムに表示させることもできる。

多次元配列の使い方

多次元配列とは

配列の部屋の中にさらに配列を入れて管理すること。
グループ化した大量のデータを1つの変数で扱えるため便利。

配列構成を確認する

var_dump関数を使うことで配列構成を確認できる

1次元目配列の部屋数を調べる場合は変数scoreListに対して「count関数」を使う。

    $scoreList = [
      [60, 90], //0番地:1人目の試験結果
      [20, 50, 95], //1番地:2人目の試験結果
      [100], //2番地:3人目の試験結果
    ];

    echo '<h2>配列構成</h2>';
    echo '<pre>';
    var_dump($scoreList);
    echo '</pre>';
    echo count($scoreList);
      // 1次元目の部屋数を取得

2次元目配列の値を使用(参照)する

2次元目配列は1次元目の各部屋の先にあるので、1次元目の部屋番号を指定した上で使用する。

2次元目配列の部屋数を調べる

2次元目配列内の部屋数を調べるため1時限目配列の部屋番号を指定した上で「count関数」を記述する。

    echo '<h2>1人目の試験結果</h2>';
    echo '<pre>';
    var_dump($scoreList[0]);
    echo '</pre>';
    // 1次元目の部屋数を指定すると
    // 2次元目にある2次元目配列構成を表示する
    echo $scoreList[0][0];
    echo '<br>';
    echo $scoreList[0][1];
    echo '<br>';
    echo count($scoreList[0]);
    // 1次元目の部屋番号を指定して
    // count関数を呼び出すと
    // 指定先にある2次元目部屋数を返す

2次元目配列の値を変更する

    echo '<h2>1人目の試験結果を修正</h2>';
    echo '<pre>';
    var_dump($scoreList);
    echo '</pre>';

第4章:連想配列

連想配列の使い方

連想配列とは

連想配列は部屋に好きな文字列や数値を使用することができる。
名前を付けた部屋を「キー」と呼ぶ。

PHPの配列の特徴

・配列と連想配列はどちらも同じ配列型
・キーには数値と文字列を混ぜて使用できる
・連想配列は入力順が保証される順序付きマップ

    $items = array(
      'f-001' => 'りんご',
      'f-002' => 'みかん',
      'd-001' => '水',
      'd-002' => 'コーラ',
    );
    $northKanto = [
      8  => '茨城県',
      9  => '栃木県',
      10 => '群馬県',
    ];

    /*
    連想配列は部屋に名前をつけて値を管理する
    JSのオブジェクトに近い
    let 変数名 = {
      名前: 値,
      名前: 値,
    }
    */

    echo '<h2>1回目の出力</h2>';
    echo '<pre>';
    var_dump($items);
    echo '</pre>';
    echo '<pre>';
    var_dump($northKanto);
    echo '</pre>';
echo '<h2>2回目の出力</h2>';
    echo $items['f-001'];
    echo '<br>';
    echo $items['f-002'];
    echo '<br>';
    echo $items['d-001'];
    echo '<br>';
    echo $items['d-002'];
    echo '<br>';
    echo count($items);
    // 連想配列も配列なので
    // count変数で部屋数を取得できる
    //   ※JSのオブジェクトではlengthプロパティが使えない
    echo '<h2>3回目の出力</h2>';
    echo $northKanto[8];
    echo '<br>';
    echo $northKanto[9];
    echo '<br>';
    echo $northKanto[10];
    echo '<br>';
    echo count($northKanto);

【問題】グループのメンバーを連想配列で管理

    echo '<h2>問題1:ももクロ</h2>';
    // 連想配列で管理
    // 色を部屋の名前(キー)
    // メンバー名を値(バリュー)
    $momokuro =[
      'red' =>'百田夏菜子',
      'yellow' =>'玉井詩織',
      'pink' =>'佐々木彩夏',
      'purple' =>'高城れに',
      // 'green' =>'有安杏果',
      // 'blue' =>'早見あかり',
    ];

    echo '<pre>';
    var_dump($momokuro);
    echo '</pre>';

    echo '<h2>問題2:リーダー</h2>';
    echo "リーダー:{$momokuro['red']}";

    echo '<h2>問題3:人数</h2>';
echo '現在のメンバーは ' . count($momokuro) . '人';
カテゴリー