現在の言語: 日本語

戻る

疑似構造体配列
配列関連

構造体を利用した配列を準備するには下記の方法があります。
(1) クラスを使った実装
(2) 連想配列の配列

[サンプル]

copy
readonly class test {
    public function __construct(
        public int $num = 0,
        public string $data ="",
    ) {}
}

class test1
{
	//クラスを使った実装
	function test1():void
	{
		$ary = [];
		for($i=0; $i<3; $i++)
		{
			$ary[] = new test
			(				num:$i+1,
				data:"index:$i"
			);
		}
		
		for($i=0; $i< 3; $i++)
		{
			echo "i:$i num:".$ary[$i]->num." data:".$ary[$i]->data.PHP_EOL;
		}
/*
i:0 num:1 data:index:0
i:1 num:2 data:index:1
i:2 num:3 data:index:2
*/
	}
	//連想配列の配列
	function test2():void
	{
		for($i=0; $i<3; $i++)
		{
			$ary[] =
			[
				"num" => $i+1,
				"data" => "index:$i"
			];
		}
		for($i=0; $i< 3; $i++)
		{
			echo "i:$i num:".$ary[$i]["num"]." data:".$ary[$i]["data"].PHP_EOL;
		}
/*
i:0 num:1 data:index:0
i:1 num:2 data:index:1
i:2 num:3 data:index:2
*/
	}
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
echo "</pre>";
copy
readonly class test 
{
	public function __construct(
		public int $num = 0,
		public string $data ="",
	) {}
}

class test1
{
	//Implementation using a class
	function test1():void
	{
		$ary = [];
		for($i=0; $i<3; $i++)
		{
			$ary[] = new test
			(
				num:$i+1,
				data:"index:$i"
			);
		}
		
		for($i=0; $i< 3; $i++)
		{
			echo "i:$i num:".$ary[$i]->num." data:".$ary[$i]->data.PHP_EOL;
		}
/*
i:0 num:1 data:index:0
i:1 num:2 data:index:1
i:2 num:3 data:index:2
*/
		}
		//Array of associative arrays
		function test2():void
		{ 
			for($i=0; $i<3; $i++) 
			{ 
				$ary[] = 
				[ 
					"num" => $i+1, 
					"data" => "index:$i" 
				]; 
			} 
			for($i=0; $i< 3; $i++) 
			{ 
				echo "i:$i num:".$ary[$i]["num"]." data:".$ary[$i]["data"].PHP_EOL; 
			}
/*
i:0 num:1 data:index:0
i:1 num:2 data:index:1
i:2 num:3 data:index:2
*/ 
		}
	}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
echo "</pre>";
クラスを使った実装のイメージ
[クラスの構造体にreadonlyをつけた理由]
C言語の構造体は値を書き換えられますが、
モダンなPHP開発では
「一度作ったデータ(構造体)は変更せず、変えるなら作り直す」
という設計がバグを防ぐため、readonly クラスがよく使われます。

連想配列の配列のイメージ
1件分のデータを表す連想配列を、親となる配列にどんどん追加(push)していくイメージです。

特徴クラスの配列連想配列の配列
型の安全性高い(int以外入れるとエラー)低い(何でも入ってしまう)
メモリ効率的(構造が固定されているため)やや非効率(各要素がキー名文字列を持つため)
手軽さクラス定義が必要定義なしで今すぐ書ける


戻る

著作権情報
ホームページおよびアプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。