現在の言語: 日本語 |
多次元配列の要素更新 |
配列関連 |
class test1
{
function test1():void
{
$ary =[
[1,2,3],
[4,5,6],
[7,8,9],
];
$ary[0][0]=100;
$ary[0][1]=101;
$ary[0][2]=102;
for($i=0; $i<3; $i++)
{
if($i==1)
{
for($j=0; $j<3; $j++)
{
$ary[$i][$j]+=10;
}
}
}
print_r($ary);
}
/*
Array
(
[0] => Array
(
[0] => 100
[1] => 101
[2] => 102
)
[1] => Array
(
[0] => 14
[1] => 15
[2] => 16
)
[2] => Array
(
[0] => 7
[1] => 8
[2] => 9
)
)
*/
function test2():void
{
$ary = [
"A" => [
"up" => [1,2,3],
"down" => [4,5,6]
],
"B" => [
"up" => [11,12,13],
"down" => [14,15,16]
],
"C" => [
"up" => [21,22,23],
"down" => [24,25,26]
],
];
foreach ($ary as $key => &$data)// & を付けるのがポイント
{
if($key === "A")
{
$data["up"] = array_map(fn($v) => $v + 100, $data["up"]);
}
foreach($data["down"] as &$value)
{
$value += 10;
}
}
print_r($ary);
unset($value);//内側の参照解除
unset($data);//外側の参照解除
}
/*
Array
(
[A] => Array
(
[up] => Array
(
[0] => 101
[1] => 102
[2] => 103
)
[down] => Array
(
[0] => 14
[1] => 15
[2] => 16
)
)
[B] => Array
(
[up] => Array
(
[0] => 11
[1] => 12
[2] => 13
)
[down] => Array
(
[0] => 24
[1] => 25
[2] => 26
)
)
[C] => Array
(
[up] => Array
(
[0] => 21
[1] => 22
[2] => 23
)
[down] => Array
(
[0] => 34
[1] => 35
[2] => 36
)
)
)
*/
function test3():void
{
$ary = [
"A" => [
"up" => [1,2,3],
"down" => [4,5,6]
],
"B" => [
"up" => [11,12,13],
"down" => [14,15,16]
],
"C" => [
"up" => [21,22,23],
"down" => [24,25,26]
],
];
$tmp=[];
$tmp=$ary["C"]["up"];
foreach ($tmp as &$value)
{
$value += 100;
}
/*
array_mapを使用して1行で計算する書き方
$tmp = array_map(fn($v) => $v + 100, $ary["C"]["up"]);
*/
print_r($tmp);
$aryNew = [
"C" => ["up" => $tmp], // Cのupのみ更新
];
// 深い階層まで比較して上書きしてくれる
$ary = array_replace_recursive($ary, $aryNew);
print_r($ary);
}
/*
Array
(
[A] => Array
(
[up] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[down] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
)
[B] => Array
(
[up] => Array
(
[0] => 11
[1] => 12
[2] => 13
)
[down] => Array
(
[0] => 14
[1] => 15
[2] => 16
)
)
[C] => Array
(
[up] => Array
(
[0] => 1000
[1] => 2000
[2] => 3000
)
[down] => Array
(
[0] => 24
[1] => 25
[2] => 26
)
)
)
*/
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
echo "</pre>";
class test1
{
function test1():void
{
$ary =[
[1,2,3],
[4,5,6],
[7,8,9],
];
$ary[0][0]=100;
$ary[0][1]=101;
$ary[0][2]=102;
for($i=0; $i<3; $i++)
{
if($i==1)
{
for($j=0; $j<3; $j++)
{
$ary[$i][$j]+=10;
}
}
}
print_r($ary);
}
/*
Array
(
[0] => Array
(
[0] => 100
[1] => 101
[2] => 102
)
[1] => Array
(
[0] => 14 [1] => 15
[2] => 16
)
[2] => Array
(
[0] => 7
[1] => 8
[2] => 9
)
)
*/
function test2():void
{
$ary = [
"A" => [
"up" => [1,2,3],
"down" => [4,5,6]
],
"B" => [
"up" => [11,12,13],
"down" => [14,15,16]
],
"C" => [
"up" => [21,22,23],
"down" => [24,25,26]
],
];
foreach ($ary as $key => &$data)// The key is the &.
{
if($key === "A")
{
$data["up"] = array_map(fn($v) => $v + 100, $data["up"]);
}
foreach($data["down"] as &$value)
{
$value += 10;
}
}
print_r($ary);
unset($value); // Inner dereference
unset($data); // Outer dereference
}
/*
Array
(
[A] => Array
(
[up] => Array
(
[0] => 101
[1] => 102
[2] => 103
)
[down] => Array
(
[0] => 14
[1] => 15
[2] => 16
)
)
[B] => Array
(
[up] => Array
(
[0] => 11
[1] => 12
[2] => 13
)
[down] => Array
(
[0] => 24
[1] => 25
[2] => 26
)
)
[C] => Array
(
[up] => Array
(
[0] => 21
[1] => 22
[2] => 23
)
[down] => Array
(
[0] => 34
[1] => 35
[2] => 36
)
)
)
*/
function test3():void
{
$ary = [
"A" => [
"up" => [1,2,3],
"down" => [4,5,6]
],
"B" => [
"up" => [11,12,13],
"down" => [14,15,16]
],
"C" => [
"up" => [21,22,23],
"down" => [24,25,26]
],
];
$tmp=[];
$tmp=$ary["C"]["up"];
foreach ($tmp as &$value)
{
$value += 100;
}
/*
One-line calculation using array_map
$tmp = array_map(fn($v) => $v + 100, $ary["C"]["up"]);
*/
print_r($tmp);
$aryNew = [
"C" => ["up" => $tmp], // Updates only the up value of C
];
// Compares and overwrites even deep within the hierarchy
$ary = array_replace_recursive($ary, $aryNew);
print_r($ary);
}
/*
Array
(
[A] => Array
(
[up] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[down] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
)
[B] => Array
(
[up] => Array
(
[0] => 11
[1] => 12
[2] => 13
)
[down] => Array
(
[0] => 14
[1] => 15
[2] => 16
)
)
[C] => Array
(
[up] => Array
(
[0] => 1000
[1] => 2000
[2] => 3000
)
[down] => Array
(
[0] => 24
[1] => 25
[2] => 26
)
)
)
*/
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
echo "</pre>";
| 著作権情報 |
| ホームページおよびアプリ等に掲載されている情報等については、いかなる保障もいたしません。 ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、 その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |