現在の言語: 日本語

戻る

配列要素の上書き(1)
配列関連

配列要素を更新する処理のサンプルです。

[サンプル]

copy
class test1
{
	function test1():void
	{
		$data = ["num1" => 100, "num2" => 20];
		$this->sum1($data);//sum total:120
		$data["num1"] = 10;
		$this->sum1($data);//sum total:30
	}
	function test2():void
	{
		$data = [1, 2, 3, 4, 5];
		$index = 0;
		foreach($data as &$num)
		{
			switch($index)
			{
				case 2:
				case 4:
				case 5:
					$num *= 10;
					break;
			}
			echo "index:$index num:$num".PHP_EOL;
/*
index:0 num:1
index:1 num:2
index:2 num:30
index:3 num:4
index:4 num:50
*/
			$index++;
		}
		$this->sum2($data);//sum total:87
	}
	function test3():void
	{
		$colors = ['red', 'green', 'blue'];
		// インデックス1から1つ削除し、'yellow'を挿入
		array_splice($colors, 1, 1, 'yellow'); 
		for($i=0;$i $value)
		{
			echo "value:$value".PHP_EOL;
		}
/*
value:red
value:yellow
value:blue
*/
	}
	private function sum1(array $ary)
	{
		$total = 0;
		foreach ($ary as $key => $num)
		{
			$total += $num;
		}
		echo "sum total:$total".PHP_EOL;
	}
	private function sum2(array $ary)
	{
		$total = 0;
		foreach ($ary as $num)
		{
			$total += $num;
		}
		echo "sum total:$total".PHP_EOL;
	}
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
echo "</pre>";
copy
class test1
{ 
	function test1():void 
	{ 
		$data = ["num1" => 100, "num2" => 20]; 
		$this->sum1($data);//sum total:120 
		$data["num1"] = 10; 
		$this->sum1($data);//sum total:30 
	} 
	function test2():void 
	{ 
		$data = [1, 2, 3, 4, 5]; 
		$index = 0; 
		foreach($data as &$num) 
		{ 
			switch($index) 
			{ 
				case 2: 
				case 4: 
				case 5: 
					$num *= 10; 
					break; 
			} 
			echo "index:$index num:$num".PHP_EOL;
/*
index:0 num:1
index:1 num:2
index:2 num:30
index:3 num:4
index:4 num:50
*/
			$index++;
		}
		$this->sum2($data);//sum total:87
	}
	function test3():void
	{
		$colors = ['red', 'green', 'blue'];
		// Delete one from index 1 and insert 'yellow'
		array_splice($colors, 1, 1, 'yellow');
		for($i=0;$i $value)
		{
			echo "value:$value".PHP_EOL;
		}
/*
value:red
value:yellow
value:blue
*/
	}
	private function sum1(array $ary) 
	{ 
		$total = 0; 
		foreach ($ary as $key => $num) 
		{ 
			$total += $num; 
		} 
		echo "sum total:$total".PHP_EOL; 
	} 
	private function sum2(array $ary) 
	{ 
		$total = 0; 
		foreach ($ary as $num) 
		{ 
			$total += $num; 
		} 
		echo "sum total:$total".PHP_EOL; 
	}
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
echo "</pre>";

$data["num1"] = 10;
連想配列のキーを指定して値を変更します。

foreach($data as &$num)
$(参照渡し)をすることで
配列の要素を直接書き換えることができます。

array_splice
配列の一部を削除し、別の要素で置き換えます。

count($colors)の件数は変わりません。
array_spliceを実行するとインデックス1から1つ削除し、代わりに 'yellow' を1つ挿入されます。
array_spliceの処理は新しい配列を返すのではなく、元の変数 $colors 自体を直接書き換える処理です。
要素を減らすとインデックスが詰まってしまい
要素のスキップが発生する可能性があります。
しかし今回は1つ消して、1つ入れる置換処理のため
配列の件数も添字の対応も変わりません。
そのためループ処理に影響を与えることはありません。

phpのforeachは配列要素の順番が保証されています。
これは内部的に順序付きマップとして保持されているためです。
そのため、明示的にソート等の処理をしない限り、定義した順番どおりに処理されます。


戻る

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