現在の言語: 日本語

戻る

多次元配列の作成
配列関連

PHPで多次元配列を実装する主な方法は、「配列の要素の中にさらに配列を入れる」ことです。

[サンプル]

copy
class test1
{
	//行データを追加
	function test1():void
	{
		$ary =[
			[1,2,3],
			[4,5,6],
		];
		$this->echoArray($ary, 2, 2);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:4
index:4 i:1 j:1 ary:5
index:5 i:1 j:2 ary:6
*/
		//要素(行)を追加
		$ary[] = [
			7,8,9
		];
		$this->echoArray($ary, 3, 3);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:4
index:4 i:1 j:1 ary:5
index:5 i:1 j:2 ary:6
index:6 i:2 j:0 ary:7
index:7 i:2 j:1 ary:8
index:8 i:2 j:2 ary:9
*/
		$ary2 =[
			[
				"person" => "tanaka",
				"age" =>20,
			],
			[
				"person" => "sato",
				"age" =>21,
			],
		];
		$this->echoPersonAge($ary2);
/*
person:tanaka age:20
person:sato age:21
*/
		//要素(行)を追加
		$ary2[] = [
			"person" => "suzuki",
			"age" =>22,
		];
		$this->echoPersonAge($ary2);
/*
person:tanaka age:20
person:sato age:21
person:suzuki age:22
*/
	}
	private function echoArray(array $ary, int $row, int $col)
	{
		$index = 0;
		for($i=0; $i < $row; $i++)
		{
			for($j=0; $j < $col; $j++)
			{
				echo "index:$index i:$i j:$j ary:".(string)($ary[$i][$j]).PHP_EOL;
				$index++;
			}
		}
	}
	private function echoPersonAge(array $ary)
	{
		foreach($ary as $tmp)
		{
			echo "person:".$tmp["person"]." age:".$tmp["age"].PHP_EOL;
		}
	}
	//列に追加
	function test2():void
	{
		$ary =[
			[1,2],
			[4,5],
		];
		$this->echoArray($ary, 2, 2);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:1 j:0 ary:4
index:3 i:1 j:1 ary:5
*/
		$ary[0][] = 3;
		$ary[1][] = 6;
		$this->echoArray($ary, 2, 3);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:4
index:4 i:1 j:1 ary:5
index:5 i:1 j:2 ary:6
*/
	}
	//3次元配列データの作成
	function test3():void
	{
		$ary = []; // 空の配列を用意
		
		for ($i = 1; $i <= 3; $i++)
		{
			$row = []; // 各行の配列を初期化
			for ($j = 1; $j <= 3; $j++)
			{
				$row[] = $i * $j; // 列を追加
			}
			$ary[] = $row; // 作成した行を本体に追加
		}
		$this->echoArray($ary, 3, 3);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:2
index:4 i:1 j:1 ary:4
index:5 i:1 j:2 ary:6
index:6 i:2 j:0 ary:3
index:7 i:2 j:1 ary:6
index:8 i:2 j:2 ary:9
*/
		$ary2 = [];
		for ($i = 0; $i < 3; $i++) { // 1 <= 3 ではなく 0 < 3
			for ($j = 0; $j < 3; $j++) {
				for ($k = 0; $k < 3; $k++) {
					// 計算式を調整(元の計算を維持するなら ($i+1)*($j+1)*($k+1))
					$ary2[$i][$j][$k] = ($i + 1) * ($j + 1) * ($k + 1);
				}
			}
		}
		$this->echoArray($ary, 3, 3);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:2
index:4 i:1 j:1 ary:4
index:5 i:1 j:2 ary:6
index:6 i:2 j:0 ary:3
index:7 i:2 j:1 ary:6
index:8 i:2 j:2 ary:9
*/
	}
	private function echoArray3(array $ary, int $count1, int $count2, int $count3)
	{
		$index = 0;
		for($i=0; $i < $count1; $i++)
		{
			for($j=0; $j < $count2; $j++)
			{
				for($k=0; $k < $count3; $k++)
				{
					echo "index:$index i:$i j:$j k:$k ary:".(string)($ary[$i][$j][$k]).PHP_EOL;
					$index++;
				}
			}
		}
	}
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
echo "<hr>";
$cls1->test3();
echo "</pre>";
copy
class test1
{ 
	//Add row data 
	function test1():void 
	{ 
	$ary =[ 
	[1,2,3], 
	[4,5,6], 
	]; 
	$this->echoArray($ary, 2, 2);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:4
index:4 i:1 j:1 ary:5
index:5 i:1 j:2 ary:6
*/ 
	//Add element (row) 
	$ary[] = [ 
	7,8,9 
	]; 
	$this->echoArray($ary, 3, 3);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:4
index:4 i:1 j:1 ary:5
index:5 i:1 j:2 ary:6
index:6 i:2 j:0 ary:7
index:7 i:2 j:1 ary:8
index:8 i:2 j:2 ary:9
*/ 
	$ary2 =[ 
	[ 
	"person" => "tanaka", 
	"age" =>20, 
	], 
	[ 
	"person" => "sato", 
	"age" =>21, 
	], 
	]; 
	$this->echoPersonAge($ary2);
/*
person:tanaka age:20
person:sato age:21
*/ 
	//Add element (row) 
	$ary2[] = [ 
	"person" => "suzuki", 
	"age" =>22, 
	]; 
	$this->echoPersonAge($ary2);
/*
person:tanaka age:20
person:sato age:21
person:suzuki age:22
*/ 
	} 
	private function echoArray(array $ary, int $row, int $col) 
	{ 
		$index = 0; 
		for($i=0; $i < $row; $i++) 
		{ 
			for($j=0; $j < $col; $j++) 
			{ 
				echo "index:$index i:$i j:$j ary:".(string)($ary[$i][$j]).PHP_EOL; 
				$index++; 
			} 
		} 
	} 
	private function echoPersonAge(array $ary) 
	{ 
		foreach($ary as $tmp) 
		{ 
			echo "person:".$tmp["person"]." age:".$tmp["age"].PHP_EOL; 
		} 
	} 
	//add to column 
	function test2():void 
	{ 
		$ary =[ 
		[1,2], [4,5], 
		]; 
		$this->echoArray($ary, 2, 2);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:1 j:0 ary:4
index:3 i:1 j:1 ary:5
*/ 
		$ary[0][] = 3; 
		$ary[1][] = 6; 
		$this->echoArray($ary, 2, 3);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:4
index:4 i:1 j:1 ary:5
index:5 i:1 j:2 ary:6
*/ 
	} 
	//Create 3D array data 
	function test3():void 
	{ 
		$ary = []; // Prepare an empty array
		
		for ($i = 1; $i <= 3; $i++)
		{
			$row = []; // Initialize the array for each row
			for ($j = 1; $j <= 3; $j++)
			{
				$row[] = $i * $j; // Add a column
			}
			$ary[] = $row; // Add the created row to the body
		}
		$this->echoArray($ary, 3, 3);
	/*
	index:0 i:0 j:0 ary:1
	index:1 i:0 j:1 ary:2
	index:2 i:0 j:2 ary:3
	index:3 i:1 j:0 ary:2
	index:4 i:1 j:1 ary:4
	index:5 i:1 j:2 ary:6
	index:6 i:2 j:0 ary:3
	index:7 i:2 j:1 ary:6
	index:8 i:2 j:2 ary:9
	*/
		$ary2 = [];
		for ($i = 0; $i < 3; $i++) { // 0 < 3, not 1 <= 3
			for ($j = 0; $j < 3; $j++) {
				for ($k = 0; $k < 3; $k++) {
					// Adjust the formula (to keep the original calculation, use ($i+1)*($j+1)*($k+1)))
					$ary2[$i][$j][$k] = ($i + 1) * ($j + 1) * ($k + 1);
				}
			}
		}
		$this->echoArray($ary, 3, 3);
/*
index:0 i:0 j:0 ary:1
index:1 i:0 j:1 ary:2
index:2 i:0 j:2 ary:3
index:3 i:1 j:0 ary:2
index:4 i:1 j:1 ary:4
index:5 i:1 j:2 ary:6
index:6 i:2 j:0 ary:3
index:7 i:2 j:1 ary:6
index:8 i:2 j:2 ary:9
*/ 
	} 
	private function echoArray3(array $ary, int $count1, int $count2, int $count3) 
	{ 
		$index = 0; 
		for($i=0; $i < $count1; $i++) 
		{ 
			for($j=0; $j < $count2; $j++) 
			{ 
				for($k=0; $k < $count3; $k++) 
				{ 
					echo "index:$index i:$i j:$j k:$k ary:".(string)($ary[$i][$j][$k]).PHP_EOL; 
					$index++; 
				} 
			} 
		} 
	}
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
echo "<hr>";
$cls1->test3();
echo "</pre>";
test1()
既存の多次元配列に新しいデータを追加するには、[](空のブラケット)を使います。
配列の末尾に新しい配列を追加するには、[]を使います。

test2()
すでにある行(子配列)に対して、新しい値を追加します。

test3()
配列[ページ][行][列]
配列の要素の中に、さらに配列を入れるネスト構造を追加する方法となります。

行の追加: $array[] = [新データ];
列の追加: $array[行インデックス][] = 新データ;


戻る

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