質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

638閲覧

unsetについて教えて

takachansann

総合スコア4

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/12/07 04:21

前提・実現したいこと

<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // この時点で、$arr は array(2, 4, 6, 8) となります // unset($value) しなければ、$value は今でも最後の要素 ($arr[3]) を指したままです foreach ($arr as $key => $value) { // $arr[3] が、$arr の各要素で上書きされて... echo "{$key} => {$value} "; print_r($arr); } // ...つまり、二番目から最後までの値が最後の値にコピーされていきます // 出力 // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) ?>

発生している問題・エラーメッセージ

foreach ($arr as $key => $value) {
// $arr[3] が、$arr の各要素で上書きされて...
echo "{$key} => {$value} ";
print_r($arr);
}
// ...つまり、二番目から最後までの値が最後の値にコピーされていきます

// 出力
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>

が解りません

該当のソースコード

// $arr[3] が、$arr の各要素で上書きされて...


// 出力
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )

[3] => 2 )
[3] => 4 )
[3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )

試したこと

何回も読んだけど理解不能です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/12/07 04:29

書いてのとおり、$arr[3]が上書きされている様子がそのまま出力されているだけですが、どのあたりがわからないのでしょうか?
m.ts10806

2020/12/07 04:34

コードはマークダウンのcodeにてご提示ください
takachansann

2020/12/07 04:40

$arr[3]が上書きされている様子が意味が解らないのです。 $arr は array(2, 4, 6, 8) となってほしいのですが、 foreach ($arr as &$value) { $value = $value * 2; 1*2 2*2 3*2 4*2 が 2 4 6 8 なら解るのですが、 // $arr[3] が、$arr の各要素で上書きされて.. $arr の各要素で上書き? どうゆう事ですか? $arr の各要素は 2、4、6、8? 意味がわからないのです
takachansann

2020/12/07 04:43

又、 // unset($value) しなければ、$value は今でも最後の要素 ($arr[3]) を指したままです とあるのですが 最後の要素 ($arr[3])は  4では無いのですか?
m.ts10806

2020/12/07 04:53

質問は編集できます
guest

回答4

0

自己解決

foreachで配列要素を書き換える。

ありがとうございます。

K_Y_Mさん

maisumakun

**************~~~~~質問~~~~~**************

<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // この時点で、$arr は array(2, 4, 6, 8) となります // unset($value) しなければ、$value は今でも最後の要素 ($arr[3]) を指したままです foreach ($arr as $key => $value) { // $arr[3] が、$arr の各要素で上書きされて... echo "{$key} => {$value} "; print_r($arr); } // ...つまり、二番目から最後までの値が最後の値にコピーされていきます // 出力 // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) ?>

**************~~~~~~~~~~**************

https://kinocolog.com/php_foreach_reference/

「理解できない」と一言でいいましても
参照渡し自体が理解できていないのか、ループ処理自体が理解できていないのか
等がわかりません。

URLの$value=1000が理解できた と仰っていますが。

ループ1回目は$value = 2となるため、$arr[3]が2
ループ2回目は$value = 4となるため、$arr[3]が4
ループ3回目は$value = 6となるため、$arr[3]が6
ループ4回目はループ3回目で$arr[3]が6となった為、$value = 6で、$arr[3]が6で出力される
が理解できない理由を教えて下さい。

1度目のforeachを抜けた後も$valueは$arr[3]であり、
$valueに代入された値は$arr[3]にも反映されます。
ループ1回目は$arr[0]=2を$valueにセットする為
$value=2となり、$arr[3] = 2となるため、$arr全体は
[0] => 2, [1] => 4, [2] => 6, [3] => 2
となる。
ここまでで不明点はありますか?

ループ4回目はループ3回目で$arr[3]が6となった為、$value = 6で、$arr[3]が6で出力される

ココが理解できていないです。

ループ4回目がなぜループ3回目で$arr[3]が6となった為、$value = 6で、$arr[3]が6で出力されるのですか。

このような、「ループを回しながらそのループを書き換える」ような操作は、言語や環境によって動作が違ってくるものです(他の言語では「例外になって落ちる」という状況もありえます)。PHPの場合は「書き換わったものをそのまま採用する」という流れになっています。

1度目のforeachを抜けた後も$valueは$arr[3]。

2度目のforeachの[3]は 各回ごとに1度目のforeachの$valueを参照していくので数字が変わっていく。

なぜ最後だけ6になるかと言うと、

3回目では[3] => 6と書き換わってしまっているのですね

完了です。

以下は私の理解出来ていない文を載せます

投稿2020/12/08 03:04

takachansann

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // この時点で、$arr は array(2, 4, 6, 8) となります // unset($value) しなければ、$value は今でも最後の要素 ($arr[3]) を指したままです foreach ($arr as $key => $value) { // $arr[3] が、$arr の各要素で上書きされて... echo "{$key} => {$value} "; print_r($arr); } // ...つまり、二番目から最後までの値が最後の値にコピーされていきます // 出力 // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) ?>

******************----------**************************

<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } で&$value &が要素を直接書き換えるのは解ります。 この時点で、$arr は array(2, 4, 6, 8) となります。 も理解できているつもりです。 $arrが書き換わっているのは理解できますが $value は今でも最後の要素 ($arr[3]) を指したままです。とあるのですが $value は  foreach ($arr as &$value) { $value = $value * 2; } $value の 最後の要素 ($arr[3])とありますが $arr は array(2, 4, 6, 8) $arr[3]は8になりますよね。 書き換えの前の $arr[3]は4になりますよね。 foreach ($arr as $key => $value) { // $arr[3] が、$arr の各要素で上書きされて... echo "{$key} => {$value} "; print_r($arr); } // $arr[3] が、$arr の各要素で上書きされて... も理解できていないのですが $arr[3] が、$arr の各要素で上書きされる動き?が解らないのです こんな感じで理解しているのです。 理由としたら // 0 => 2 Array ( [0] => 2, [1] => 2, [2] => 3, [3] => 4 )  // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 3, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 8 ) と考えていましたが 2目のforeach 文は $arrが 書き換わっているので // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )                              ↑                $value は今でも最後の要素 ($arr[3]) を指したままです 2目のforeach 文は $arrが 書き換わっているので 8に書き換わっているはずが $value を 指しているので ここからどこの$valueを指しているのかよくわからないのですが foreach ($arr as $key => $value) の$valueと なると $arrの値になると8になりますし 順番に2→4→6と変動するならば 前のforeach ($arr as &$value) { $value = $value * 2; }なのかなと思います。 又 // 0 => 2 Array ( [0] => 2, [1] => 2, [2] => 3, [3] => 4 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 3, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 8 ) 何故2と言うと 1回目は0=>1の  1×2=2 で値が2になる 2回目は1=>2の  2×2=4 で値が4になる 3回目は2=>3の  2×3=6 で値が6になる ここから理解できなくなってきます

投稿2020/12/07 06:00

takachansann

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/12/07 06:13 編集

> 書き換えの前の $arr[3]は4になりますよね。 そうかも知れませんが関係ありません。すでに8に書き換わっています(し直後に上書きされてしまうのでその8も使われません)
maisumakun

2020/12/07 06:03 編集

> ここからどこの$valueを指しているのかよくわからないのですが foreach ($arr as $key => $value)で回すたびに$valueへ、そして$arr[3]へ代入されます。
maisumakun

2020/12/07 06:11

foreach ($arr as $key => $value) に入る直前:$arrは[2, 4, 6, 8]、$value=$arr[3]=8、ここまではいいですか?
K_Y_M

2020/12/07 06:19

foreach ($arr as &$value) { $value = $value * 2; } このループ処理は 1回目のループで$value=$arr[0]=2となり 2回目のループで$value=$arr[1]=4となり 3回目のループで$value=$arr[2]=6となり 4回目のループで$value=$arr[3]=8となり、ループ処理が終了する ところ迄は理解頂けてますでしょうか?
maisumakun

2020/12/07 06:26

そして、foreach($arr as $key => $value)の1回目では、$valueに$arr[0]の2が代入される、つまり$value経由で$arr[3]も書き換わって、$arr全体は[2, 4, 6, 2]となります。 ここでわからないことはありますか?
K_Y_M

2020/12/07 06:27

このソース上では、 1度目のforeachを抜けた後も$valueは$arr[3]であり、 $valueに代入された値は$arr[3]にも反映される。 という事をまずは頭にいれましょう。 この発想が「参照渡し」と呼ばれています。
guest

0

参照渡しを理解されていないかと思われます。

foreach ($arr as &$value)

の”&”の部分です。
以下のURLを参考にされると、解説と皆さんの仰っている内容が理解できると思います。
https://kinocolog.com/php_foreach_reference/

投稿2020/12/07 04:52

編集2020/12/07 04:54
K_Y_M

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takachansann

2020/12/07 05:00

$aryHoge = [1, 2, 3, 4]; foreach($aryHoge as &$value){ $value *= 3; //値を3倍にして代入 } $value = 1000; print_r($aryHoge); //最後の値に注目 Array ( [0] => 3 [1] => 6 [2] => 9 [3] => 1000 は
takachansann

2020/12/07 05:02

$value = 1000; なるほどなと理解できます。 話を戻しますと <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; 上記では $value = 1000; どこにあてはまるのですか
takachansann

2020/12/07 05:04

$value は今でも最後の要素 ($arr[3]) を指したままです とあるのですが 4ですよね。 で 4か8なら解るのですか なんで6なんですか
takachansann

2020/12/07 05:06

えっもしかして 掛け算されていないのですか
maisumakun

2020/12/07 05:07

> なんで6なんですか foreach ($arr as $key => $value) の3回目で、$arr[2]の6が$valueへ入るときに、$arr[3]が上書きされます。
maisumakun

2020/12/07 05:07

> 4ですよね。 その4はどこから出てきたのでしょうか?
K_Y_M

2020/12/07 05:51 編集

2つ目のforeach文が$value = 1000;に当てはまりますね。 $valueは$arr[3]自体を指している為、 ループ1回目は$value = 2となるため、$arr[3]が2 ループ2回目は$value = 4となるため、$arr[3]が4 ループ3回目は$value = 6となるため、$arr[3]が6 ループ4回目はループ3回目で$arr[3]が6となった為、 $value = 6で、$arr[3]が6で出力される という感じですね。
takachansann

2020/12/07 05:12

$value は今でも最後の要素 ($arr[3]) を指したままです は4ですよね。
maisumakun

2020/12/07 05:15 編集

「この時点で、$arr は array(2, 4, 6, 8) と」なっていますので、1回目のループを抜けきった時点では$value=$arr[3]=8です。
K_Y_M

2020/12/07 05:20 編集

takachansannさん ソース全体をどの様に理解されていて 解説の内容とここが異なるので、理解できません。 という内容を「試したこと」に記載して頂いた方が 全体を通してアドバイスを頂きやすいと思いますよ。
K_Y_M

2020/12/07 05:51 編集

URLの$value=1000が理解できた と仰っていますが。 ループ1回目は$value = 2となるため、$arr[3]が2 ループ2回目は$value = 4となるため、$arr[3]が4 ループ3回目は$value = 6となるため、$arr[3]が6 ループ4回目はループ3回目で$arr[3]が6となった為、$value = 6で、$arr[3]が6で出力される が理解できない理由を教えて下さい。
takachansann

2020/12/07 06:25

なんかここのような気がします。
takachansann

2020/12/07 06:29

ここが理解できていないです。
takachansann

2020/12/07 06:31

ループ3回目は$value = 6となるため、$arr[3]が6 ↓ ループ4回目はループ3回目で$arr[3]が6となった為、$value = 6で、$arr[3]が6で出力される が理解できない理由を教えて下さい。
K_Y_M

2020/12/07 06:32

1度目のforeachを抜けた後も$valueは$arr[3]であり、 $valueに代入された値は$arr[3]にも反映されます。 ループ1回目は$arr[0]=2を$valueにセットする為 $value=2となり、$arr[3] = 2となるため、$arr全体は [0] => 2, [1] => 4, [2] => 6, [3] => 2 となる。 ここまでで不明点はありますか?
K_Y_M

2020/12/07 06:34

不明点が無い場合は、ループ2回目がどの様になるのか考えて記載してみましょう。
takachansann

2020/12/07 06:37

ループ4回目はループ3回目で$arr[3]が6となった為、$value = 6で、$arr[3]が6で出力される ココが理解できていないです。 ループ4回目がなぜループ3回目で$arr[3]が6となった為、$value = 6で、$arr[3]が6で出力されるのですか。
takachansann

2020/12/07 06:39

1度目のforeachを抜けた後も$valueは$arr[3]であり、・・・理解できます。
K_Y_M

2020/12/07 06:40

ループ2回目がどの様になるのか書けますか? 書けるのであれば理解できるはずです。 書けなければ何処が書けないのかを記載して下さい。 そこが理解の妨げになっている部分です。
maisumakun

2020/12/07 06:43 編集

> ココが理解できていないです。 このような、「ループを回しながらそのループを書き換える」ような操作は、言語や環境によって動作が違ってくるものです(他の言語では「例外になって落ちる」という状況もありえます)。PHPの場合は「書き換わったものをそのまま採用する」という流れになっています。
K_Y_M

2020/12/07 06:42

「理解できない」と一言でいいましても 参照渡し自体が理解できていないのか、ループ処理自体が理解できていないのか 等がわかりません。
takachansann

2020/12/07 06:58

全部理解できました。 きましたーーーーーーー!!!!!!!!!
K_Y_M

2020/12/07 07:02

良かったです。
takachansann

2020/12/07 07:09

https://kinocolog.com/php_foreach_reference/ ↓ 1度目のforeachを抜けた後も$valueは$arr[3]。 2度目のforeachの[3]は 各回ごとに1度目のforeachの$valueを参照していくので数字が変わっていく。 なぜ最後だけ6になるかと言うと、 3回目では[3] => 6と書き換わってしまっているのですね
K_Y_M

2020/12/07 07:10 編集

そうです。
K_Y_M

2020/12/07 07:11

その書き換わりを防止する為、「unset」を用いる という事です。
K_Y_M

2020/12/07 07:16

追加で質問が無い場合は、ベストアンサーを選んで「受付中」から「解決済み」へ変更しましょう。
guest

0

参照が残っていると、$valueへの代入が、そのまま$arr[3]への代入となります。

なので、ループ1回目では$value = 2となるため、$arr[3]も2となります。

投稿2020/12/07 04:43

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/12/07 04:44

> 最後の要素 ($arr[3])は  4では無いのですか? 代入されて上書きされてしまいます。
takachansann

2020/12/07 04:49

参照が残っていると、$valueへの代入が、そのまま$arr[3]への代入となります。 参照が残っている?も理解できませんし。 $valueへの代入が、そのまま$arr[3]への代入となります。ていうのも理解できていません
maisumakun

2020/12/07 04:53

とりあえず、理解できないのであれば理解する必要もないかもしれません(意図的に書く部類のコードでは全くありません)。 「&$valueのように受けた参照をunset()しなければ、このように意味不明な動作になる」ということだけ覚えておけばいいでしょう。
takachansann

2020/12/07 05:10

確かに 理解できなくても生きて行けますが 何か根本的なところが理解できていない気がするので すごくくやしいのです。
maisumakun

2020/12/07 05:11 編集

すみません、回答やコメントからその姿勢を読み解けませんでした。
takachansann

2020/12/07 06:02

<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // この時点で、$arr は array(2, 4, 6, 8) となります // unset($value) しなければ、$value は今でも最後の要素 ($arr[3]) を指したままです foreach ($arr as $key => $value) { // $arr[3] が、$arr の各要素で上書きされて... echo "{$key} => {$value} "; print_r($arr); } // ...つまり、二番目から最後までの値が最後の値にコピーされていきます // 出力 // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) ?> ******************----------************************** <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } で&$value &が要素を直接書き換えるのは解ります。 この時点で、$arr は array(2, 4, 6, 8) となります。 も理解できているつもりです。 $arrが書き換わっているのは理解できますが $value は今でも最後の要素 ($arr[3]) を指したままです。とあるのですが $value は  foreach ($arr as &$value) { $value = $value * 2; } $value の 最後の要素 ($arr[3])とありますが $arr は array(2, 4, 6, 8) $arr[3]は8になりますよね。 書き換えの前の $arr[3]は4になりますよね。 foreach ($arr as $key => $value) { // $arr[3] が、$arr の各要素で上書きされて... echo "{$key} => {$value} "; print_r($arr); } // $arr[3] が、$arr の各要素で上書きされて... も理解できていないのですが $arr[3] が、$arr の各要素で上書きされる動き?が解らないのです こんな感じで理解しているのです。 理由としたら // 0 => 2 Array ( [0] => 2, [1] => 2, [2] => 3, [3] => 4 )  // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 3, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 8 ) と考えていましたが 2目のforeach 文は $arrが 書き換わっているので // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) ↑ $value は今でも最後の要素 ($arr[3]) を指したままです 2目のforeach 文は $arrが 書き換わっているので 8に書き換わっているはずが $value を 指しているので ここからどこの$valueを指しているのかよくわからないのですが foreach ($arr as $key => $value) の$valueと なると $arrの値になると8になりますし 順番に2→4→6と変動するならば 前のforeach ($arr as &$value) { $value = $value * 2; }なのかなと思います。 又 // 0 => 2 Array ( [0] => 2, [1] => 2, [2] => 3, [3] => 4 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 3, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 8 ) 何故2と言うと 1回目は0=>1の  1×2=2 で値が2になる 2回目は1=>2の  2×2=4 で値が4になる 3回目は2=>3の  2×3=6 で値が6になる ここから理解できなくなってきます
maisumakun

2020/12/07 06:07

すみません、文章自体が散らかっていて意味が取りづらいです。
takachansann

2020/12/07 06:19

すみません 文章自体が散らかっている= 私のこの件での現状ですね。 うーーん。 どこから整理していったら良いのかがよくわからないのです。 おそらく、最後の要素 ($arr[3])が全く理解できていないのです。 理解するために色々と関連図けて書いていくと もっと理解できなくなっているのです。
maisumakun

2020/12/07 06:23

> $value は今でも最後の要素 ($arr[3]) を指したままです。とあるのですが これは、「$valueが$arr[3]の別名になっている」ということです。$valueを書き換えれば$arr[3]も書き換わり、逆に$arr[3]へ代入した値は$valueからでも参照できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問