データ構造@PHP¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. データ構造の実装方法¶
ハードウェアが処理を行う時に、データの集合を効率的に扱うためのデータ格納形式をデータ構造という。
データ構造のPHPによる実装方法を以下に示す。
配列型¶
同じデータ型のデータを並べたデータ格納様式のこと。
▼ インデックス配列¶
番号キーごとに値が格納された配列型のこと。
Array
(
[0] => A
[1] => B
[2] => C
)
▼ 多次元配列¶
配列の中に配列を持つ配列型のこと。
配列の入れ子構造が2段の場合、『二次元配列』と呼ぶ。
(
[0] => Array
(
[0] => リンゴ
[1] => イチゴ
[2] => トマト
)
[1] => Array
(
[0] => メロン
[1] => キュウリ
[2] => ピーマン
)
)
▼ 連想配列¶
キー名 (赤、緑、黄、果物、野菜) ごとに値が格納された配列型のこと。
下の例は、二次元配列かつ連想配列である。
Array
(
[赤] => Array
(
[果物] => リンゴ
[果物] => イチゴ
[野菜] => トマト
)
[緑] => Array
(
[果物] => メロン
[野菜] => キュウリ
[野菜] => ピーマン
)
)
LinkedList型¶
PHPで使用することは個人的にはないデータ格納様式。
詳しくは、JavaにおけるLinkedList型を参考にせよ。
▼ PHPのlist
メソッドとは何なのか¶
PHPのlist
メソッドは、List型とは意味合いが異なる。
配列の個々の要素を変数に格納したい場合、List型を使用しなければ、冗長ではあるが、以下の様に実装する必要がある。
*実装例*
<?php
$array = array("あ", "い", "う");
$a = $array[0];
$i = $array[1];
$u = $array[2];
echo $a.$i.$u; // あいう
しかし、以下の様に、list
メソッドを使用することによって、複数の変数への格納を1行で実装できる。
*実装例*
<?php
list($a, $i, $u) = array("あ", "い", "う");
echo $a.$i.$u; // あいう
キュー型¶
PHPでは、array_push
メソッドとarray_shift
メソッドを組み合わせることにより、実装できる。
*実装例*
<?php
$array = array("Blue", "Green");
// 引数を、配列の最後に、要素として追加する。
array_push($array, "Red");
print_r($array);
// 出力結果
// Array
// (
// [0] => Blue
// [1] => Green
// [2] => Red
// )
// 配列の最初の要素を取り出す。
$theFirst= array_shift($array);
print_r($array);
// 出力結果
// Array
// (
// [0] => Green
// [1] => Red
// )
// 取り出された値の確認
echo $theFirst; // Blue
▼ メッセージキュー¶
送信元の好きなタイミングでファイル (メッセージ) をメッセージキューに追加できる。
また、宛先の好きなタイミングでメッセージを取り出せる。
Stack型¶
PHPでは、array_push
メソッドとarray_pop
メソッドで実装可能。
Tree型¶
▼ 二分探索木¶
各ノードにデータが格納されている。
▼ ヒープ¶
プライオリティキューを実現する時に使用される。
各ノードにデータが格納されている。
01-02. Javaにおけるデータ構造の実装方法¶
データ構造のJavaによる実装方法を以下に示す。
配列型¶
▼ ArrayList¶
ArrayListクラスによって実装される配列型。
PHPのインデックス配列に相当する。
▼ HashMap¶
HashMapクラスによって実装される配列型。
PHPの連想配列に相当する。
連結リスト型¶
値をポインタによって順序通り並べたデータ格納形式のこと。
▼ 単方向リスト¶
▼ 双方向リスト¶
▼ 循環リスト¶
キュー型¶
スタック型¶
ツリー型¶
02. プリミティブデータ型¶
プリミティブ型¶
▼ プリミティブ型とは¶
スカラー型、複合型、その他、に分類できる。
以下のリンクを参考にせよ。
スカラー型¶
▼ bool¶
T/F | データの種類 | 説明 |
---|---|---|
FALSE |
$var = |
何も格納されていない変数 |
False |
文字としてのFalse | |
0 |
数字、文字列 | |
"" |
空文字 | |
array() | 要素数が0 個の配列 |
|
NULL | NULL値 | |
TRUE |
上記以外の値 |
▼ float¶
▼ int¶
▼ string¶
複合型¶
▼ array¶
▼ callable¶
▼ iterable¶
▼ object¶
<?php
class A
{
private $name = "Hiroki";
public function HelloWorld()
{
return sprintf(
"%s, %s",
$this->name,
"Hello World!"
);
}
}
$a = new A;
var_dump($a);
// object(A)#1 (1) {
// ["name":"A":private]=>
// string(6) "Hiroki"
//}
print_r($a);
// A Object
// (
// [name:A:private] => Hiroki
// )
その他のデータ型¶
▼ date¶
厳密にはデータ型ではないが、便宜上、データ型とする。
タイムスタンプとは、協定世界時(UTC)を基準にした1970年1月1日の0時0分0秒からの経過秒数を表したもの。
フォーマット | 実装方法 | 備考 |
---|---|---|
日付 | 2019-07-07 | 区切り記号なし、ドット、スラッシュなども可能 |
時間 | 19:07:07 | 区切り記号なし、も可能 |
日付と時間 | 2019-07-07 19:07:07 | 同上 |
タイムスタンプ (秒) | 1562494027 | 1970年1月1日の0時0分0秒から2019-07-07 19:07:07 までの経過秒数 |
▼ null¶
▼ resource¶
02-02. データ型の判定/変換¶
判定関数¶
▼ is_scalar
¶
スカラー型 (bool、float、int、string) を判定する。
キャスト演算子¶
▼ (string)
¶
<?php
$var = 10; // $varはinteger型。
// キャスト演算子でデータ型を変換
$var = (string) $var; // $varはstring型
▼ (int)
¶
<?php
$var = 1;
// integer型
$var = (int) $var;
// 1
▼ (bool)
¶
<?php
$var = 1;
// boolean型
$var = (bool) $var;
// true
▼ (float)
¶
<?php
$var = "1.0";
// Float型
$var = (float) $var;
// 1.0
▼ (array)
¶
<?php
// 配列型
$var = (array) $var;
▼ (object)
¶
<?php
// Object型
$var = (object) $var;